matplotlib中文乱码解决及plt.rcParams参数的使用

问题描述

在使用matplotlib绘图时,常常要求图例使用中文,而若直接使用plt.title(‘中文’)或plt.xlabel(‘中文’)时,中文可能会出现下面的小方块

matplotlib中文乱码解决及plt.rcParams参数的使用_第1张图片

解决方法

快速解决方法

在导入模块后加入下面代码

plt.rcParams['font.sans-serif']=['SimHei']    # 用来设置字体样式以正常显示中文标签
plt.rcParams['axes.unicode_minus']=False    # 默认是使用Unicode负号,设置正常显示字符,如正常显示负号

若仍无法解决,可能是电脑没有’SimHei’这个字体,可以试着用’FangSong’等其他字体

下面是Unicode和ASCII显示负号时的不同(参考matplotlib官网)
matplotlib中文乱码解决及plt.rcParams参数的使用_第2张图片
matplotlib中文乱码解决及plt.rcParams参数的使用_第3张图片

永久解决办法

转自:【python数据可视化笔记】——matplotlib图例中文乱码以及坐标负号显示

找到自己想要的中文字体

  1. 在系统中查找已有的字体(好处是不需要安装):在“C:\Windows\Fonts”中选择后缀为“.ttf”的中文字体并复制,这一步我选择了黑体

  2. 在 fontpalace 上下载对应版本的后缀为“.ttf”的字体,复制到“C:\Windows\Fonts”中安装

把字体复制到matplotlib的字体文件中

输入下面命令找到matplotlib配置文件

print(matplotlib.matplotlib_fname())

在“c:\program files\python37\lib\site-packages\matplotlib\mpl-data\matplotlibrc”的“font/ttf”文件夹中粘贴刚刚复制的字体,然后修改配置文件matplotlibrc,去掉以下三行代码开头的#

font.family         : sans-serif

font.sans-serif     : SimHei, DejaVu Sans, Bitstream Vera Sans, ...    # 这里注意要把字体名称SimHei放在第一个

axes.unicode_minus  : False    # 修改为False,作用是解决负号的乱码问题

还要注意有的字体名称并不是字体文件的名称,可以查看字体文件的属性(标题)确认一下

重新加载字体

做完以上操作后执行下面命令

from matplotlib.font_manager import _rebuild

_rebuild()

之后重启python,很多时候这样就解决了。

删除matplotlib缓存文件

如果仍然不能正常显示输入以下代码

matplotlib.get_cachedir()

在’C:\Users\sunch.matplotlib’找到缓存文件夹并删除该文件夹,之后重启python,如果还是不行可以试试重启电脑,我就是重启了才可以,果然没有什么是一次重启解决不了的,如果有那就两次

有关plt.rcParams参数的使用

转自:Matplotlib中plt.rcParams用法(设置图像细节)

plt.rcParams['figure.figsize'] = (5.0, 4.0)     # 显示图像的最大范围
plt.rcParams['image.interpolation'] = 'nearest' # 差值方式,设置 interpolation style
plt.rcParams['image.cmap'] = 'gray'             # 灰度空间

#设置rc参数显示中文标题
#设置字体为SimHei显示中文
plt.rcParams['font.sans-serif'] = 'SimHei'
#设置正常显示字符
plt.rcParams['axes.unicode_minus'] = False
plt.title('sin曲线')
#设置线条样式
plt.rcParams['lines.linestyle'] = '-.'
#设置线条宽度
plt.rcParams['lines.linewidth'] = 3
#绘制sin曲线
plt.plot(x, y, label='$sin(x)$')

你可能感兴趣的:(matplotlib中文乱码解决及plt.rcParams参数的使用)