在很长一段时间里用Python绘图,matplotlib都不能很好的显示中文,起初是认为我的pycharm里的设置问题,但是发现同样的问题在spyder里也同样的出现了,虽然有的地方可以用英文实在不行用拼音。。。但是在作图这里没有中文真的是太不方便了,机缘巧合下在年前终于找到问题的根源了,于是乎爱刨根问底儿的我把整个过程的解决方法分享给大家~~

一共有两种解决方案,我强烈推荐第一种,因为更为方便,绘图时不用再写别的参数,调用一次即可,第二种方法也会写出来但是更多的是作为了解,主要因为相比之下太麻烦

方法一:

示例:绘制每月的商品数量X轴月份显示为中文

增加X轴Y轴中文,图标标题

from matplotlib import pyplot as plt

a = ["一月份","二月份","三月份","四月份","五月份","六月份"]

b=[56.01,26.94,17.53,16.49,15.45,12.96]

plt.figure(figsize=(20,8),dpi=80)

plt.bar(range(len(a)),b)

#绘制x轴

plt.xticks(range(len(a)),a)

plt.xlabel("月份")

plt.ylabel("数量")

plt.title("每月数量")

plt.show()

不出意外绘制出来的图是这样的。。。。。绘制出来的图片,在所有应该显示为中文的地方均显示乱码

之前一直以为是系统中字符集支持的问题,其实并不是这样,根本原因是matplotlib内置的原因,直到我知道了 matplotlib.rc这个方法,其实这个我也不太会用,那么我们看一下这个的源码写的是该如何使用(学会看源码真的很重要!!)

首先它肯定是能设置字体和颜色的,有关字体我们怎么设置呢?我们接着往下看

有关字体的设置找到了,可以接收为字典,它利用了**font接收了一下字典,其实我们我们完全可以一行搞定,当然我更喜欢横着写,例如下面这样其实也是OK的~~

matplotlib.rc("font",family='MicroSoft YaHei',weight="bold")

那么我们加入这行代码在跑一下试试

果不其然产生了一个报错,那么我们为什么把MicroSoft YaHei(这个不就是微软雅黑吗,电脑里都有啊)这个加进去会报错呢?

重点来了

其实报错只有一个原因就是他没有这个字体,虽然电脑里有这个字体但是不代表matplotlib里也有这个字体,所以解决matplotlib中的中文显示问题主要就是要找到它所内置支持的字体,那么我们首先查看一下它的内置字体,运行以下代码查看所支持的字体

# 查询当前系统所有字体

from matplotlib.font_manager import FontManager

import subprocess

mpl_fonts = set(f.name for f in FontManager().ttflist)

print('all font list get from matplotlib.font_manager:')

for f in sorted(mpl_fonts):

print('\t' + f)

运行后他会显示出所有支持的字体,大约100多种。。。。具体的我就不一一列举了

但是你会发现这个都是英文字体啊,中文字体在哪里,其实我当时也非常困扰,但是细心的我发现了其中的奥秘,>>>其实他是有中文的只不过是用拼音写的....<<<

其中你会发现有如下字体:DengXian

FangSong

KaiTi

LiSu

YouYuan

Adobe Fan Heiti Std

Adobe Fangsong Std

Adobe Heiti Std

Adobe Kaiti Std

其实这些都是中文啊啊啊啊啊啊~~~~激动的我把代码增加一行再试试,随便选了个字体

from matplotlib import pyplot as plt

#新增加的两行

import matplotlib

matplotlib.rc("font",family='YouYuan')

a = ["一月份","二月份","三月份","四月份","五月份","六月份"]

b=[56.01,26.94,17.53,16.49,15.45,12.96]

plt.figure(figsize=(20,8),dpi=80)

plt.bar(range(len(a)),b)

#绘制x轴

plt.xticks(range(len(a)),a)

plt.xlabel("月份")

plt.ylabel("数量")

plt.title("每月数量")

plt.show()

完美支持,也就是增加了两行代码就解决了中文的显示问题,归根到底还是很多没没有找到matplotlib所支持的内置字体方法,或是找到了不知道怎么用

方法二:

找到字体的所在路径

from matplotlib import font_manager

my_font = font_manager.FontProperties(fname="/System/Library/Fonts/PingFang.ttc")

但是他有一个弊端就是在每个图上都需要在多家个参数调用才行,否则的话就会显示不出来

plt.xticks(range(len(a)),a,fontproperties=my_font)

plt.xlabel("月份",fontproperties=my_font)

plt.ylabel("数量",fontproperties=my_font)

plt.title("每月数量",fontproperties=my_font)

结尾

因为方法二比较麻烦,用的也比较少,所以我没有把具体的步骤和情况写出来,只作为了解,相比还是比较推荐方法一的,授人以鱼不如授人以渔,方法一我写的比较细,从根源上写的为什么会报错,以及怎么选择可以使用的字体,希望能帮助到大家

python中文显示不出来_彻底解决Python里matplotlib不显示中文的问题相关推荐

  1. python如何读取log文件_怎么解决Python读取log文件时报错

    怎么解决Python读取log文件时报错 发布时间:2020-05-23 14:15:56 来源:亿速云 阅读:157 作者:鸽子 问题描述: 写了一个读取log文件的Python脚本:# -*- c ...

  2. python输出文件有省略号_如何解决Python输出是省略号的问题

    如何解决 Python 输出是省略号的问题 大家在用 Python 工作的时候是否遇到过 Python 输出是省略号的问题, 那么遇到这种情况后 小伙伴是如何解决的呢 ? 是不是也有刚接触 Pytho ...

  3. python环境配置不成功_怎么解决python配置环境变量不成功

    怎么解决python配置环境变量不成功 发布时间:2020-08-25 16:02:46 来源:亿速云 阅读:94 这期内容当中小编将会给大家带来有关怎么解决python配置环境变量不成功,文章内容丰 ...

  4. python编码问题无法复现_彻底解决Python编码问题

    1. 基本概念 字符集(Character set) 解释:文字和符合的总称 常见字符集: Unicode字符集 ASCII字符集(Unicode子集) GB2312字符集 编码方法(Encoding ...

  5. python编码用什么软件_彻底解决Python编码问题

    1. 基本概念 字符集(Character set) 解释:文字和符合的总称 常见字符集: Unicode字符集 ASCII字符集(Unicode子集) GB2312字符集 编码方法(Encoding ...

  6. python画图显示不了中文_完美解决Python matplotlib绘图时汉字显示不正常的问题

    Matplotlib是一个很好的作图软件,但是python下默认不支持中文,所以需要做一些修改,方法如下: 1.在python安装目录的Lib目录下创建ch.py文件. 文件中代码为: 保存,以后通过 ...

  7. python 折线图中文乱码_彻底解决 Python画图中文乱码问题--Pyplotz组件

    1 源起 自从开始学习Python,就非常喜欢用来画图.一直没有需求画要中文显示信息的图,所以没有配置Python中文的环境.由于昨天就需要画几十个形式相同,只是数据不同的图,并且需要显示中文信息.如 ...

  8. python 3d绘图 汉字_完美解决Python matplotlib绘图时汉字显示不正常的问题

    Matplotlib是一个很好的作图软件,但是python下默认不支持中文,所以需要做一些修改,方法如下: 1.在python安装目录的Lib目录下创建ch.py文件. 文件中代码为: 保存,以后通过 ...

  9. excel 科学计数法转换成文本完整显示_表格技巧—Excel里身份证号码显示不全的多种解决办法...

    运用Excel表格可以快速统计和汇总数据,那么当在表格当中输入身份证号码时,表格通常显示不完全,这是为什么呢,今天小编就来给大家详细介绍当身份证号码显示不全时的多种解决办法,一起来学习一下吧. 首先, ...

最新文章

  1. Linux 内核启动流程
  2. Qt中使用多线程的一些心得(一)——继承QThread的多线程使用方法
  3. 低潮过后,未来医疗可穿戴市场将如何发展?
  4. IOS开发之----异常处理
  5. Matplotlib实例教程(十五) 3D散点图
  6. boost::lockfree::detail::tagged_ptr用法的测试程序
  7. Windows下程序启动时出现0xc000007b错误的解决方案
  8. YBTOJ:数列方案(组合数学)
  9. 张一鸣早期创业的访谈还挺有启发,不知道他现在的观念有没有改变
  10. HTML中的行内元素和框元素详解
  11. Python让繁琐工作自动化——chapter18 GUI控制键盘与鼠标
  12. MAC编译出错:Undefined symbols for architecture x86_64: “_CFRelease“, referenced from:
  13. MDT实现windows系统批量部署
  14. 支付宝APP支付 错误代码 insufficient-isv-permissions 错误原因: ISV权限不足
  15. 使用 Beyond Compare 和版本控制系统
  16. 【FICO】SAP中的银行
  17. 手机扫描电脑二维码登录原理
  18. 手把手教你使用QGIS制作地图
  19. svn 执行cleanup报错
  20. 业务大转型,联通新时讯广招移动互联网人才

热门文章

  1. 女人水润有诀窍,菜谱保你水灵灵 - 生活至上,美容至尚!
  2. Android-JNI开发系列《五》局部引用全局引用全局弱引用缓存策略
  3. Linux串口工具ckermit打印 android log
  4. server-2016安装软件提示缺失msvcr120.dll解决
  5. ubuntu下cpu以最大频率运行、查看CPU主频几种方法
  6. linux学习笔记:磁盘格式化与磁盘检验命令
  7. android 点赞动画_Android MotionLayout动画:续写ConstraintLayout新篇章
  8. three轨迹线在mapbox地图上显示
  9. 14c语言合并两个字符串,C语言的标识符和字符数据、字符串数据.ppt
  10. pythontuple数据类型_Python数据类型之Tuple元组实例详解