matplotlib 生成的图像中无法显示中文字符的解决方法

所属分类: 脚本专栏 / python 阅读数: 221
收藏 0 赞 0 分享

前几天使用matplotlib 绘图的时候发现无法使用中文字符,所以找了个笔记,顺便分享给大家

开发环境

  • windows 8.1 64bit
  • python 3.6.0
  • matplotlib 3.2.1

问题背景

使用 matplotlib 绘制函数图像的时候,发现设置图像名称或图例需要汉字显示的时候只能得到空格

生成图像中的中文错误效果

原因分析

python中的matplotlib仅支持Unicode编码,默认是不显示中文的.

解决方案

解决方案1

python文件中添上一段语句

plt.rcParams['font.sans-serif']=['Simhei']

之后再次运行得出图像 

解决方案2

制定加载本地的字体文件

在python文件中导入matplotlib的字体控制方法

from matplotlib.font_manager import FontProperties

另设font变量存储设置好的属性

font = FontProperties(fname=r'C:\Windows\Fonts\simhei.ttf',size=14)

设置 title 内容时将 font的存储对象赋给 fontproperties 属性

plt.title(u'y=x 与 y=x^0.5 的函数图像比较',fontproperties = font)

修改源码后生成的图像

附件

修改前的 python 文件

 import numpy as np
 import matplotlib.pyplot as plt

 x = np.linspace(0,100) # 设置自变量的取值[0,100]

 y1 = x
 y2 = x**0.5

 plt.figure()
 plt.plot(x,y1,label='y=x')
 plt.plot(x,y2,label='y=x^0.5',color='red')

 plt.title('y=x 与 y=x^0.5 的函数图像比较')

 plt.legend()
 plt.show()

经解决方案1修改后的源码

 import numpy as np
 import matplotlib.pyplot as plt

 x = np.linspace(0,100) # 设置自变量的取值[0,100]

 y1 = x
 y2 = x**0.5

 plt.figure()
 plt.plot(x,y1,label='y=x')
 plt.plot(x,y2,label='y=x^0.5',color='red')

 plt.title('y=x 与 y=x^0.5 的函数图像比较')
 plt.rcParams['font.sans-serif']=['Simhei']

 plt.legend()
 plt.show()

经解决方案2修改后的源码

 import numpy as np
 from matplotlib.font_manager import FontProperties
 import matplotlib.pyplot as plt

 x = np.linspace(0,100) # 设置自变量的取值[0,100]
 y1 = x
 y2 = x**0.5

 plt.figure()
 plt.plot(x,y1,label='y=x')
 plt.plot(x,y2,label='y=x^0.5',color='red')
 font = FontProperties(fname=r'C:\Windows\Fonts\simhei.ttf',size=14)

 plt.title(u'y=x 与 y=x^0.5 的函数图像比较',fontproperties = font)

 plt.legend()
 plt.show()
更多精彩内容其他人还在看

keras-siamese用自己的数据集实现详解

这篇文章主要介绍了keras-siamese用自己的数据集实现详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Python xlrd模块导入过程及常用操作

这篇文章主要介绍了Python xlrd模块导入过程及常用操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

keras打印loss对权重的导数方式

这篇文章主要介绍了keras打印loss对权重的导数方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Keras 使用 Lambda层详解

这篇文章主要介绍了Keras 使用 Lambda层详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

浅谈Python中的字符串

这篇文章主要介绍了Python中的字符串相关知识,文中讲解的非常细致,代码帮助大家更好的理解,感兴趣的朋友可以参考下
收藏 0 赞 0 分享

PySide2出现“ImportError: DLL load failed: 找不到指定的模块”的问题及解决方法

这篇文章主要介绍了PySide2出现“ImportError: DLL load failed: 找不到指定的模块”的问题及解决方法,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
收藏 0 赞 0 分享

Tensorflow中k.gradients()和tf.stop_gradient()用法说明

这篇文章主要介绍了Tensorflow中k.gradients()和tf.stop_gradient()用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

matplotlib 生成的图像中无法显示中文字符的解决方法

这篇文章主要介绍了matplotlib 生成的图像中无法显示中文字符的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

keras 使用Lambda 快速新建层 添加多个参数操作

这篇文章主要介绍了keras 使用Lambda 快速新建层 添加多个参数操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

JAVA及PYTHON质数计算代码对比解析

这篇文章主要介绍了JAVA及PYTHON质数计算代码对比,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多