使用python的matplotlib的库生成图片时,中文字体可能会现实乱码(方块),因为matplotlib默认的字体不支持显示中文。
检查Matplotlib环境
- 查看matplotlib字体配置文件路径
import matplotlib
print(matplotlib.matplotlib_fname())
返回matplotlibrc
文件路径,如:
/usr/local/lib/python3.9/site-packages/matplotlib/mpl-data/matplotlibrc
可以得到 ttf
字体文件的路径:
/usr/local/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf
- 查看matplotlib缓存目录
import matplotlib
print(matplotlib.get_cachedir())
返回的缓存路径,如:
/home/xxx/.cache/matplotlib
TTF字体文件获取
- 从Windows系统获取字体
# 如微软雅黑
c:\windows\fonts\msyh.ttc
- 网络搜索TTF中文字体
配置Matplotlib使用中文字体
方法1: 使用font_manager模块加载字体使用
from matplotlib.font_manager import FontProperties
import matplotlib.pyplot as plt
font = FontProperties(fname='下载的ttf文件路径', size=12)
plt.plot([1, 2, 3], [4, 5, 6])
plt.title('中文标题', fontproperties=font)
plt.show()
适合于简单的使用plt场景
方法2: 设置matplotlib字体参数
- 拷贝字体文件到matplotlib的
ttf
字体文件的路径下 - 删除matplotlib缓存目录下的json文件
- 查看字体的
Family Name
from matplotlib import font_manager
for font in font_manager.fontManager.ttflist:
print(font.fname,font.name)
输出如下数据:
/usr/local/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/msyh.ttc Microsoft YaHei
Family Name
为Microsoft YaHei
。
注意,没有输出新加入的字体,需要删除缓存目录下的json文件。
4. 使用示例
import matplotlib.pyplot as plt
import matplotlib
# 指定默认字体
plt.rcParams['font.family'] = 'Microsoft YaHei' # 或其他支持中文的字体
plt.rcParams['axes.unicode_minus'] = False # 解决负号'-'显示为方块的问题
plt.plot([1, 2, 3], [4, 5, 6])
plt.title('中文标题')
plt.show()