MacOS Matplotlib中文显示乱码/方块解决方法
【版本:python3.6】
- 首先进入
/Users/jc/anaconda3/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf
目录下查看是否有汉字字体,如SimHei.ttf,若无,则先将字体下载并放入上述目录下,下载链接如下:
http://www.fontpalace.com/font-download/SimHei/
【注】我是用的anaconda,所以ttf路径如上,若不用anaconda,则将字体下载到:
你的python对应的:site-packages\matplotlib\mpl-data\fonts/ttf即可。
-
修改matplotlibrc配置文件:
进入上述路径中的mpl-data文件夹,找到matplotlibrc文件并做如下修改
#font.family :sans-serif
#font.sans-serif : SimHei, DejaVu Serif……(将SimHei加到最前面)
#axes.unicode_minus,将True改为False (这里是关于负号显示的) -
清空缓存
一定要清空matlibplot加载字体的缓存,否则加载时必然会报找不到字体的错,
如:
UserWarning: findfont: Font family [‘sans-serif’] not found. Falling back to Bitstream Vera Sans (prop.get_family(), self.defaultFamily[fontext]))删除方法:
首先,进入对应文件夹:cd ~/.matplotlib/
然后删除该文件夹下的Fontlist.json文件,如果你的文件夹下还有fontlist-v300.json文件,也必须要删除。否则无效 -
修改代码
在你的python代码中添加如下:
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 引入加载字体名
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
-
重启python
-
设置坐标轴名称字体:
font = {'family': 'Times New Roman', 'weight': 'normal', 'size': 15}
plt.xlabel('Route label',size=15,fontdict=font)
- 设置图例字体
plt.legend(loc = 'upper right',prop={'family' : 'Times New Roman'})
9.设置坐标轴刻度字体
引入全局字体,最重要的是family,必要时修改上述配置文件中的对应参数信息
plt.rcParams['font.serif'] = 'Times New Roman' # 引入加载字体名
plt.rcParams['font.family'] = 'Times New Roman' # 引入加载字体名