Jupyter Matplotlib 的中文字体问题

Jupyter Note Book是个好东西,可以很方便地写一些脚本来执行,很多时候都需要画图,但是一个很头疼的问题是画图用的matplotlib用的默认字体中不包含中文,知道可以用

1
plt.rcParams['font.family'] = 'STHeiti'  # 替换为你选择的字体

这个命令来让它显示中文了,可又不知道系统里有哪些是中文字体,而且最头疼的是你安装了一个中文字体,却不知道要怎么引用它,因为字体的文件名和注册到系统中的名字是不一定一样的,好在还有一个Python脚本可以做到这个。

1
2
3
4
5
6
from matplotlib import pyplot as plt
import matplotlib
a=sorted([f.name for f in matplotlib.font_manager.fontManager.ttflist])

for i in a:
    print(i)

这样就可以把matplotlib能用的所有字体都打印出来,选择带heiti或者songti的就可以用了,我选择的是STHeiti,确实解决了这个问题。

简化一下,可以下面这个脚本来只打印可能是中文的字体

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
from matplotlib import pyplot as plt
import matplotlib

# 获取所有字体
fonts = sorted([f.name for f in matplotlib.font_manager.fontManager.ttflist])

# 筛选并打印包含特定字符串的字体
keywords = ["Noto", "Songti", "Heiti"]
filtered_fonts = [font for font in fonts if any(keyword in font for keyword in keywords)]

for font in filtered_fonts:
    print(font)

我系统上可用的就有Noto Sans Mono CJK SC,这个非常好了,Linux上也能用,Debian上只需要sudo apt install fonts-noto-cjk即可。

Built with Hugo
Theme Stack designed by Jimmy