环境:macOS Monterey 12.2.1、Python3.10.2、Matplotlib 3.5.1
目录
方法一:修改配置文件,全局字体修改
例外情况
方法二:rcParams设置,全局字体修改
方法三:fontproperties设置,非全局字体修改
方法四:FontProperties设置,非全局字体修改
方法一:修改配置文件,全局字体修改
搜索网络的解决方式,通过copy字体和修改matplotlibrc的三处文本解决问题,大部分情况下代码能正常显示中文。
1. 终端输入命令:python,进入Python界面输入代码,获取matplotlib包所在的配置文件的路径。比如我的为: /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/matplotlib/mpl-data/matplotlibrc
import matplotlib
matplotlib.matplotlib_fname() #输出matplotlib包所在的配置文件的路径

2. 根据第一步获取路径打开文件夹。比如我的路径为:/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/matplotlib/mpl-data/fonts/ttf
3. 网络下载中文字体放进去,比如SimHei.ttf(黑体)、SimSun.ttf(宋体),YaHei.ttf(微软雅黑)。要ttf格式的,并安装字体。
4. 使用文本编辑或sublime Text软件打开matplotlibrc文件。(位置:/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/matplotlib/mpl-data/matplotlibrc)
(1)找到font.family: sans-serif,去掉最前面的#。
(2)找到font.sans-serif:,去掉前面的#,并将刚才的SimHei、SimSun、Microsoft YaHei添加进去。

(3)找到axes.unicode_minus: True,去掉最前面的#,并将True改为False。

4. 保存、关闭matplotlibrc文件。
5. 打开/Users/用户名/.matplotlib文件夹,把里面的文件删掉。我的里面只有一个fontlist-v330.json。
6. 以后的大部分代码不用任何设置可以正常显示中文了。
如以下代码绘制的图形中文标题正常显示。
import matplotlib.pyplot as plt
input_values = [1, 2, 3, 4, 5, 6]
squares = [1, 4, 9, 16, 25, 36]
fig, ax = plt.subplots()
ax.plot(input_values, squares, linewidth=3)
ax.set_title("平方值", fontsize=20)
ax.set_xlabel("值", fontsize=14)
ax.set_ylabel("平方-值", fontsize=14)
ax.tick_params(axis='both', labelsize=14)
plt.show()

例外情况
虽然方法一通过修改配置文件修改了全局的字体设置,但以下场景绘制的图像还是不能正常显示中文:代码中图形使用plt.style.use('seaborn')设置时。
可以用方法二来解决。
import matplotlib.pyplot as plt
...
plt.style.use('seaborn') # 上述代码加入此句代码
fig, ax = plt.subplots()
...

方法二:rcParams设置,全局字体修改
1. 在plt.style.use('seaborn') 后面加上字体设置代码,即可显示中文。字体设置代码必须在seaborn代码后面才能生效。
2. 字体设置只针对该py文件plt.style.use('seaborn') 后面的代码有效,如果后面的图像又使用类似plt.style.use('seaborn') 语句,还需要再次设置字体代码。
import matplotlib.pyplot as plt # 最前面如果已经import,此句可以不要
...
plt.style.use('seaborn')
# 字体设置代码
plt.rcParams['font.sans-serif'] = 'Microsoft Yahei' # 显示汉字:SimHei黑体,simsum宋体,Microsoft YaHei雅黑。根据系统安装的字体,有的能用有的不能用,我的是这三个可以。
plt.rcParams['axes.unicode_minus'] = False # 正常显示负号

方法三:fontproperties设置,非全局字体修改
1. 在plt.title()、plt.xlabel(),plt.ylabel()参数设置中,使用fontproperties指定字体。
2. 可以指定不同的字体,但字体必须在ttf里,并已安装。
import matplotlib.pyplot as plt
input_values = [1, 2, 3, 4, 5, 6]
squares = [1, 4, 9, 16, 25, 36]
plt.style.use('seaborn')
plt.plot(input_values, squares, linewidth=3)
plt.figure("Hello测试中文!",facecolor='lightgray')
plt.title("测试中文",fontsize=20,fontproperties="Microsoft Yahei")
plt.xlabel("X值", fontsize=14,fontproperties="SimHei")
plt.ylabel("Y值", fontsize=14,fontproperties="SimHei")
plt.show()

方法四:FontProperties设置,非全局字体修改
此方法需要导入FontProperties模块、设置myfont变量,并指定fontproperties参数三个步骤,虽繁琐,但可以指定ttc格式的字体文件。
1. 导入FontProperties模块:from matplotlib.font_manager import FontProperties
2. 设置变量myfont = FontProperties(fname=r"/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/matplotlib/mpl-data/fonts/ttf/PingFang.ttc", size=14)
3. plt.title()、plt.xlabel(),plt.ylabel()参数设置中,使用fontproperties指定字体为变量myfont。 文章来源:https://www.toymoban.com/news/detail-419293.html
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties # 步骤一
input_values = [1, 2, 3, 4, 5, 6]
squares = [1, 4, 9, 16, 25, 36]
# 步骤二
myfont = FontProperties(fname=r"/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/matplotlib/mpl-data/fonts/ttf/PingFang.ttc", size=14)
plt.style.use('seaborn')
fig, ax = plt.subplots()
ax.plot(input_values, squares, linewidth=3)
ax.set_title("平方值", fontproperties=myfont) # 步骤三
ax.set_xlabel("值", fontproperties=myfont) # 步骤三
ax.set_ylabel("平方-值", fontproperties=myfont) # 步骤三
ax.tick_params(axis='both', labelsize=14)
plt.show()

还有一种通过rc设置的全局字体修改方法,和方法二有些类似。但试了一下不太好用,就不写了。文章来源地址https://www.toymoban.com/news/detail-419293.html
到了这里,关于Python学习过程问题记录(二):Matplotlib中文显示问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!