解决macOS和Linux下Matplotlib中文显示问题
方法一:修改font.family
1、下载字体
下载需要的中文字体(推荐fontpalace),常用字有SimSun(宋体)、SimHei(黑体)。
2、安装字体
复制ttf字体文件(注意必须是ttf格式)到....../site-packages/matplotlib/mpl-data/fonts/ttf目录下(Matplotlib安装路径可通过pip show matplotlib查看)。
3、修改字体默认设置
(1)修改Matplotlib默认设置
通过修改matplotlibrc文件(....../site-packages/matplotlib/mpl-data/matplotlibrc)。在该文件中所做的修改会成为所有Matplotlib项目的默认设置。
(1) 找到font.family、font.sans-serif、axes.unicode_minus,将前面的#删除
(2) 在font.sans-serif中加入相应字体,如SimSun
(3) 将axes.unicode_minus的值从True改为False,作用就是解决负号'-'显示问题。
修改示例:
font.family: sans-serif
font.sans-serif: SimSun, DejaVu Sans, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
axes.unicode_minus : False
(2)临时修改Matplotlib设置
有时候仅需在部分py脚本中默认使用中文字体,则可以在py脚本中临时修改Matplotlib设置。
在需要显示中文字体的py脚本中加入以下几行:
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimSun']
mpl.rcParams['font.family']='sans-serif'
mpl.rcParams['axes.unicode_minus']=False
4、清空缓存
修改完成后需要清空Matplotlib缓存,即删除~/.cache/matplotlib目录(rm -rf ~/.cache/matplotlib)。如果用的是jupyter,需要手动重启一下kernel。
方法二:字体属性
该方法使用较为灵活,可以为每个文本分别设置字体属性。
import matplotlib.pyplot as plt
import matplotlib.font_manager as font_manager
path = '/usr/fonts/SimSun.ttf'
zhfont = font_manager.FontProperties(fname=path)
fig, ax = plt.subplots()
ax.set_title('中文字体', fontproperties=zhfont, size=20)