关于Matplotlib中文乱码的问题一直困扰着我这个朴朴素素的制图人员,我也是试来试去各种方法无果之后,发现了一个最佳的解决方案。首先我列举一些市面上并不一定有效的解决方案:
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams['font.sans-serif'] = ['SimHei']
# Matplotlib中设置字体-黑体,解决Matplotlib中文乱码问题
plt.rcParams['axes.unicode_minus'] = False
# 解决Matplotlib坐标轴负号'-'显示为方块的问题
sns.set(font='SimHei')
# Seaborn中设置字体-黑体,解决Seaborn中文乱码问题
像上面这个方案,有的时候我绘图很神奇的是这些方案并不管用,乱码方框还是乱码方框。
终极解决方案
其实编码类问题也很好解决,只要明确两点,1.中文乱码是因为使用了英文的字体,所以只需要让中文绘图时强制使用中文字体就ok了;2.英文乱码也一样,是使用了中文的编码系统。只要我们在绘图时指定中文使用中文字体,英文使用英文字体,那么如何实现呢?
对于windows系统,引用windows目录下的fonts文件夹下的黑体字体,就可以解决中文乱码问题:
from matplotlib.font_manager import FontProperties
# 设置我们需要用到的中文字体(字体文件地址)
my_font = FontProperties(fname=r"c:\windows\fonts\SimHei.ttf", size=20)
英文也一样,引用windows目录下的fonts文件夹下的Times new Roman字体、
from matplotlib.font_manager import FontProperties
# 设置我们需要用到的中文字体(字体文件地址)
my_font1=FontProperties(fname=r"c:\windows\fonts\times.ttf",size=20)
使用的时候呢,直接在需要字体的地方,指定使用font就行,也就是中文字体使用中文字体,英文字体使用英文字体
#也就是中文字体使用中文字体,英文字体使用英文字体
plt.title(u'灌木', fontproperties=my_font)
plt.xlabel('R²', fontproperties=my_font1)