matplotlib使用中无法显示中文的解决方案有哪些
Admin 2022-09-15 群英技术资讯 323 次浏览
一共有两种解决方案,我强烈推荐第一种,因为更为方便,绘图时不用再写别的参数,调用一次即可,第二种方法也会写出来但是更多的是作为了解,主要因为相比之下太麻烦
示例:绘制每月的商品数量
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多种。。。。具体的我就不一一列举了
但是你会发现这个都是英文字体啊,中文字体在哪里,其实我当时也非常困扰,但是细心的我发现了其中的奥秘,>>>其实他是有中文的只不过是用拼音写的....<<<
其中你会发现有如下字体:
其实这些都是中文啊啊啊啊啊啊~~~~激动的我把代码增加一行再试试,随便选了个字体
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)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了Python正则表达式的相关知识,主要包括re模块的使用及正则表达式基础知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
这篇文章主要为大家介绍了Python密码学XOR流程及乘法密码教程示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
大家好,本篇文章主要讲的是分享9个好用的Python技巧,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
这篇文章主要给大家介绍了关于PyCharm调用matplotlib绘图时图像弹出问题的相关资料,文中通过图文介绍的非常详细,对大家学习或者使用PyCharm具有一定的参考学习价值,需要的朋友可以参考下
怎样用python实现求两个数的和差?这是很多新手学习python时常遇到的问题,其实解决这个问题还是比较容易的,下面我们就来具体看看怎样利用python中的函数来求两个数的和与差,有需要的朋友可以参考。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008