matplotlib设置中文字体
作者Lou Xiao创建时间2024-03-20 13:05:06更新时间2024-03-20 13:05:06
0. 前言
matplotlib是非常流行的画图软件包,在科研和工程中有着广泛的应用。由于字体的设置不当,绘图中的中文不能正常显示。本教程着手解决这个问题,并提供2种方法。
1. 方法1(常用方法)
此方法通过修改matplotlib的配置/参数,指定合适的默认字体,属于比较常用的方法。
1.1 安装中文字体
在Linux系统上,常见的字体路径是:
/usr/share/fonts
,/usr/local/share/fonts
:系统级安装的字体,影响整个操作系统;~/.fonts/
:这是当前用户的个人字体目录,用于存放用户自己的字体文件。如果该目录不存在,可以手动创建它。
1.双击鼠标左键复制此行;2.单击复制所有代码。
1
# 步骤1. 把自定义的字体文件(例如:仿宋_GB2312.ttf)拷贝到`/usr/share/fonts`(需要root权限) 或 `~/.fonts/`。
2
cp 仿宋_GB2312.ttf ~/.fonts/
3
# 步骤2. 刷新字体缓存,这个命令将重新扫描字体目录,并刷新字体缓存,使新安装的字体可用。
4
fc-cache -f -v
5
# 步骤3. 查看已经安装的字体
6
fc-list
7
# 步骤4. 清除matplotlib的字体缓存
8
rm -v ~/.cache/matplotlib/font*
1.2 设置中文字体
我们已安装了中文字体(例如:仿宋_GB2312.ttf),绘图前需要设置matplotlib的字体。
❶ 查看字体文件对应的family
1.双击鼠标左键复制此行;2.单击复制所有代码。
1
fc-list : file family
输出如下:
1.双击鼠标左键复制此行;2.单击复制所有代码。
1
/usr/share/X11/fonts/Type1/c0611bt_.pfb: Courier 10 Pitch
2
/home/LouXiao/.fonts/仿宋_GB2312.ttf: FangSong_GB2312
3
/usr/share/fonts/dejavu/DejaVuSans-Oblique.ttf: DejaVu Sans
4
/usr/share/X11/fonts/Type1/c0648bt_.pfb: Bitstream Charter
5
/usr/share/fonts/dejavu/DejaVuSans-BoldOblique.ttf: DejaVu Sans
6
/usr/share/fonts/dejavu/DejaVuSansCondensed.ttf: DejaVu Sans,DejaVu Sans Condensed
从第二行,我们获取了字体(仿宋_GB2312.ttf)的family是FangSong_GB2312
❷ 在Python代码中设置字体
1.双击鼠标左键复制此行;2.单击复制所有代码。
1
import matplotlib
2
matplotlib.rcParams['font.size'] = 12
3
matplotlib.rcParams['font.family'] = 'FangSong_GB2312'
4
# 强制清除字体缓存
5
matplotlib.font_manager._rebuild()
2. 方法2
这种方法仅通过代码方式指定中文字体,优点是对用户友好、稳健,缺点是编程较为繁琐。
1.双击鼠标左键复制此行;2.单击复制所有代码。
1
# 引入需要的库
2
import os
3
import matplotlib.pyplot as plt
4
from matplotlib.font_manager import FontProperties
5
6
# 指定字体的绝对路径(字体文件可以是任意路径)
7
font_file = "/home/LouXiao/仿宋_GB2312.ttf"
8
font_property = FontProperties(fname=font_file)
9
10
# 对于suptitle
11
plt.suptitle("这是中文字体", font=font_property)
12
# 对于title
13
plt.title("这是中文字体", font=font_property)
14
# 对于legend
15
plt.legend(prop=font_property)
文章目录