首发于memo

Python 绘图中文乱码解决方法(详细)

date: 09/15/2021

name: yin_n

tag: python

Step1:下载中文字体SimHei

在windows下可以直接找自己电脑里的simhei.ttf

或者在这下载:

simhei字体

Step2:将simhei.ttf复制到当前环境下的字体文件夹

Q:如何找到当前环境的字体文件夹?

在当前工程新建一个python文件,输入:

import matplotlib    
print(matplotlib.matplotlib_fname())

并运行,就可以看到打印结果了:

打开mpl-data文件夹,会看到有一个fonts文件夹:

把simhei.ttf复制到这个文件夹,双击simhei.ttf,然后选择install,安装即可。

Step3:修改matplotlibrc文件

就是刚刚那个mpl-data文件夹下的matplotlibrc文件,用记事本打开后:

  • 去掉font.family的注释符号#,如下图:
  • 去掉font.sans-serif的注释符号#,并添加中文字体SimHei(注意大小写),如下图:
  • 去掉axes.unicode_minus的注释,并将值True改为False,如下图:

完成后保存即可。

Step4:删除缓冲目录(很重要!)

Q:如何找到缓冲目录?

在当前工程运行:

import matplotlib
print(matplotlib.get_cachedir())

即可找到,如下图:

然后,在Terminal执行命令 rm C:\Users...(刚刚找到的那个缓冲目录),提示输入Y删除即可。

Step5:在代码里绘图的地方添加字体

#上面是其他代码
plt.rcParams['font.sans-serif'] = ['simhei']
plt.rcParams['axes.unicode_minus'] = False 
#下面是你绘图的代码

Step6:大功告成,测试一下吧

import numpy as np
import matplotlib.pyplot as plt
x = [0.02,2.02,3.98,6.06,8.11,10.14]
x = np.array(x)
num = [0,2,4,6,8,10]
y = np.array(num)
f1 = np.polyfit(x, y, 1)
p1 = np.poly1d(f1)
plt.rcParams['font.sans-serif'] = ['simhei']
plt.rcParams['axes.unicode_minus'] = False
plt.plot(x, y, 's',label='original values')
yvals = p1(x)
plt.plot(x, yvals, 'r',label='polyfit values')
plt.xlabel('I(mA)')
plt.ylabel('U(V)')
plt.title(u'线性电阻伏安特性曲线')
plt.show()

如果可以看到下图就搞定了:

没有的话,仔细检查下上面的步骤有没有都搞定吧。

参考教程:

参考链接

Thx.

编辑于 2021-09-15 21:33