在matplotlib中设置中文字体

在matplotlib中设置中文字体

matplotlib库中默认使用的字体是不支持中文的,所以如果需要中文的标签或标题则我们手动去重新设置一个支持中文格式的字体。因为之前我在设置的时候犯了一个很蠢的问题,但是也可能是很多其它小白也会遇到的问题,所以,赶紧做好笔记,防止自己以后犯蠢,也供大家参考和指正!!!

问题

这里可以看到直接用title()输入中文的时候,图中不会出现中文,是因为matplot的默认字体不支持中文格式,所以下面我会为大家演示两种中文字体的设置方式,另外也会演示我的错误,供大家参考。
环境版本:windows系统,JupyterLab,python3.8,matplotlib 3.4.1
在matplotlib中设置中文字体_第1张图片

设置中文字体的方式

  • 通过FontProperties() 设置默认字体

先贴代码

#先导入相关库
import matplotlib.pyplot as plt
import matplotlib
from matplotlib import font_manager

#调用font_manager中的FontProperties()设置自己的字体
font_path =  "C:\\Windows\\Fonts\\simhei.ttf" 			#这里需要传入字体的路径
#传参
my_font = font_manager.FontProperties(fname = font_path,size =20 )   #自己的字体就定义完成了

#查看效果
plt.plot([1,2,3],[3,4,5])
plt.title("中文出现了",fontproperties = my_font)
plt.show()

在matplotlib中设置中文字体_第2张图片

windows系统的字体存放路径都在C:\Windows\Fonts\目录下
FontProperties()中也可以设置字体的大小,通过传入参数size即可
调用自己的字体时,通过fontproperties = my_font即可

  • 设置全局字体

还是先贴代码

#在matplotlib中提供一个方法可以查看我们可以设置的默认字体,先查看一下有哪些可以使用
from matplotlib.font_manager import FontManager
import subprocess

all_fonts = set(f.name for f in FontManager().ttflist)

print('all font list get from matplotlib.font_manager:')
for f in sorted(all_fonts):
    print('\t' + f)

结果如下:
在matplotlib中设置中文字体_第3张图片

那么既然有了这么多选择下面应该就是如何设置的问题了

import matplotlib.pyplt as plt
import matplotlib

#先用字典封装号字体样式,还可以设置更多格式(类似粗细之类的)在这里我没有展示出来
font = {
    'family':'cmsy10',
    'size':18
}
matplotlib.rc("font",**font)

#效果演示
plt.plot([1,2,3],[3,4,5])
plt.title("Consolas")
plt.show()

运行结果:
在matplotlib中设置中文字体_第4张图片

在这里我挑了一个奇奇怪怪的字体,目的是让大家看见,这种设置格式是全局,不是针对于某一个标题或标签使用,所以大家用这种方式设置的时候尽量选取一个合适的字体
还有就是对matplotlib.rc()传参的时候注意要用字典的格式

import matplotlib.pyplot as plt
import matplotlib
from matplotlib import font_manager

#调用font_manager中的FontProperties()设置自己的字体
font_path =  "C:\\Windows\\Fonts\\simhei.ttf" 			
my_font = font_manager.FontProperties(fname = font_path,size =20 )   

font = {
    'family':'cmsy10',
    'size':18
}
matplotlib.rc("font",**font)

#效果演示
plt.plot([1,2,3],[3,4,5])
plt.title("Consolas",fontproperties = my_font)
plt.show()

在matplotlib中设置中文字体_第5张图片

当两种方法同时出现时,Fontproperties()方法会覆盖默认字体的设置

我的错误

我自己的错误就有一点点愚蠢了,在用第一个方法时,我可以获取一些英文的字体,但是如果时中文的字体(例如:仿宋)就会报错,好像是找不到文件之类的。后来用上面的方式获取了可用字体的时候发现了一些中文字体才醒悟,应该是文件名错了。
在matplotlib中设置中文字体_第6张图片
所以,在用第一种方式的时候,要记得使用属性里边的名字。

(以上就是全部内容,希望可以帮助大家,也欢迎大佬批评指正!!!)

你可能感兴趣的:(matplot绘图,python)