优雅解决Python中matplotlib绘图时汉字显示不正常的问题

一、问题产生

我们使用了如下代码,为了在图表上绘制中文

import matplotlib.pyplot as plt

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

优雅解决Python中matplotlib绘图时汉字显示不正常的问题_第1张图片

图表最后出现了这种方框形式的错误。

并报了如下错误

findfont: Font family ['SimHei'] not found. Falling back to DejaVu Sans.

二、问题成因

这种报错,实际是一种警告,并不影响程序的正常运行,所以最后也能出效果图,但无法正常显示中文。其实就是matplotlib 库内没有 SimHei 字体,所以需要下载相关文件。

三、解决方法

1.下载SimHei.ttf

下载地址:SimHei.ttf|字体下载 (xiazaiziti.com)

优雅解决Python中matplotlib绘图时汉字显示不正常的问题_第2张图片

2.拷贝 SimHei.ttf 到 matplotlib 的 font 文件夹  

首先找到font所在位置

import matplotlib
print(matplotlib.matplotlib_fname())

优雅解决Python中matplotlib绘图时汉字显示不正常的问题_第3张图片

进入刚刚查找到的这个路径mpl-data文件下,找到 fonts->ttf,将下载的SimHei.ttf字体拷贝到此处。

优雅解决Python中matplotlib绘图时汉字显示不正常的问题_第4张图片

拷贝成功如下

优雅解决Python中matplotlib绘图时汉字显示不正常的问题_第5张图片找到python字体缓存文件

import matplotlib
print(matplotlib.get_cachedir())

进入到该文件夹下,删除缓存文件

rm -rf /home/robot/.cache/matplotlib/*

后面会自动生成缓存文件,此处已经优雅解决

3.若还没解决

回到步骤2的开头处,找到matplotlibrc路径,修改 matplotlibrc

font.family         : sans-serif   
 # 去掉前面的#     
 font.sans-serif     : SimHei, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif  
 # 去掉前面的#,并在冒号后面添加SimHei
 axes.unicode_minus  : False
 # 去掉前面的#,并将True改为False

四、问题解决

总算显示中文了!!!

优雅解决Python中matplotlib绘图时汉字显示不正常的问题_第6张图片

你可能感兴趣的:(故障诊断,python,matplotlib,开发语言)