解决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)
posted @ 2021-01-23 14:12  Mr_Purity  阅读(1176)  评论(0)    收藏  举报