python的plot画图,如何显示中文?中文显示方框怎么办?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
基于python
,苏南大叔使用plot
画了一个体现鸢尾花数据的散点图。那么,在图中可以添加title
,suptitle
,xlabel
,ylabel
等文字,但是一旦把这些文字换成中文后,就会显示为框框了。这个问题如何解决呢?这就是本文要解决的主要问题。
大家好,这里是苏南大叔的“程序如此灵动”博客,记录苏南大叔和计算机代码的故事。本文测试环境:win10
,python@3.11.0
,pandas@1.5.3
,numpy@1.24.2
,matplotlib@3.7.1
。另外,值得特别说明的是:plot
还有基于R
语言的版本,本文的环境是python
。
中文显示框框
基于上一篇文章的代码,
把显示文字的title
,suptitle
,xlabel
,ylabel
等选项,换成中文的话,就会显示框框,如下图所示:
同时有报错信息:
UserWarning: Glyph 38598 (\N{CJK UNIFIED IDEOGRAPH-96C6}) missing from current font.
发生这个问题的原因,就是plot
的字体设置问题,并没有识别到显示中文的相关字体(比如simhei
)。有关字体的描述,可以参考:
画图程序的顶部标题栏部分,倒是正常显示中文了。很奇怪吧...
解决方案
解决方案就是修改plot
的默认配置,使他识别中文字体。当然,如果想显示别的中文字体,请修改对应的代码里面的字体名称。
设置为黑体:
plt.rcParams["font.sans-serif"] = ["SimHei"]
设置为楷体:
plt.rcParams['font.family']=['KaiTi']
网上也有写着去修改site-packages
代码的方式,这个就比较原始暴力了。如果您喜欢,也可以在对应packages
代码里面全局搜索关键词,来完成这项操作。
减号的问题
实际上设置中文字体后,还可能会遇到下面的报错:
UserWarning: Glyph 8722 (\N{MINUS SIGN}) missing from current font
这个是由于无法渲染减号所造成的,解决方案是:
plt.rc('axes', unicode_minus=False)
完整测试代码
本文的完整测试代码如下:
这是付费可看内容,收费5元。
题外话
题外话就是iris
的数据和plt
的横纵坐标标签之间是存在着对应关系的。下面的代码显示了对应关系的另外一种理解角度。
column_names = ["萼长", "萼宽", "瓣长", "瓣宽", "种类"]
iris = np.array(df_iris)
# ...
x = 0
y = 1
data_x = iris[:, x]
data_y = iris[:, y]
data_z = iris[:, 4]
plt.scatter(data_x, data_y, c=data_z, cmap="brg")
plt.xlabel(column_names[x])
plt.ylabel(column_names[y])
# ...
相关文章
中文乱码问题,在编程过程中非常常见。但是不同的环境下,解决方案却是大不相同。如下有很多中文乱码的经验文章,请查看:
- https://newsn.net/say/python-json-dumps.html
- https://newsn.net/say/py2neo-cypher-encoding.html
- https://newsn.net/say/scrapy-export-encoding.html
- https://newsn.net/say/electron-cmd-encoding.html
- https://newsn.net/say/querylist-encoding-all.html
结束语
更多python
的matplotlib
画图的问题,可以参考:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。