Matplotlib中文乱码解决方案(1):`matplotlib.font_manager` 自定义字体

HXDM 20240303 更新

Ubuntu2204 没有 Times New Roman 字体,需要安装hhh

在Linux下做文档、作图的时候,可能需要用到Arial和Times New Roman等字体。但是由于版权问题,Linux一般是不直接提供这些字体的。

注意字体也是有版权的!不过有版权也不代表一定会收费。

$ sudo apt install ttf-mscorefonts-installer # 安装
$ sudo fc-cache # 生效

由于前面提到版权问题,虽然这部分字体不收费,但是安装时需要用户同意一些协议,同意即可。

执行完成后,用以下指令确认成功:

$ fc-match Arial # 查看Arial
$ fc-match Times # 查看Times New Roman

参考自:
https://www.cnblogs.com/xia-weiwen/p/10336896.html


HXDM 20211031 更新
看这篇博客:
https://blog.csdn.net/fengdu78/article/details/111189331
这个兄弟写的博客更全

给我自己放一个我最常用的:

import matplotlib.pyplot as plt
from matplotlib import font_manager
# 查看系统能直接调用的字体
for font in font_manager.fontManager.ttflist:
    # 查看字体名以及对应的字体文件名
    print(font.name, '-', font.fname)

"""
STSong - C:\Windows\Fonts\STSONG.TTF
KaiTi - C:\WINDOWS\Fonts\simkai.ttf
Times New Roman - C:\Windows\Fonts\times.ttf
"""

# 使用 Times New Roman 字体
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = "Times New Roman"

之前总是遇到Matplotlib中文乱码问题[总是显示为方块]


我尝试了手动修改Matplotlib配置文件,有时在ubuntu18.04下OK,有时又在win10报错,鲁棒性太差…用户体验极差!


我也尝试了重载配置文件,就是修改matplotlib.rcParams部分,是的,也是时好时坏,这两个都和你的系统字体有关系,好几次,明明设置是对的,结果非得重启一下才能正常显示,很玄学!


算了,直接用使用自定义字体方案吧 [本方案最佳] 即走即用,不用和开发环境作斗争…



煮个例子吧:

import numpy as np
import pylab as pl
import matplotlib.font_manager as fm
 
myfont = fm.FontProperties(fname=r'D:\Fonts\simkai.ttf') # 设置字体
t = np.arange(0.0,2.0 * np.pi,0.01) # 自变量取值范围
s = np.sin(t) # 计算正弦函数值
z = np.cos(t) # 计算余弦函数值
pl.plot(t,s,label='正弦')
pl.plot(t,z,label='余弦')
pl.xlabel('x-变量',fontproperties=myfont,fontsize=24) #设置标签
pl.ylabel('y-正弦余弦函数值',fontproperties=myfont,fontsize=24)
pl.title('sin-cos函数图像',fontproperties=myfont,fontsize=32) #图像标题
pl.legend(prop=myfont)
pl.show()

在这里插入图片描述
我用的是【瘦金体】放在图上好像有些喜感,嘿嘿


总结一下
先调用matplotlib.font_manager.FontProperties指定字体文件,返回对象myfont
之后在使用字体的时候,传入参数fontproperties=myfont即可

Matplotlib中解决中文乱码问题有两种方式。第一种方式是使用Matplotlib自带的字体管理器来设置中文字体。你可以使用`matplotlib.font_manager`模块来查找系统中可用的中文字体,并将其设置为Matplotlib的默认字体。具体的用法可以参考Matplotlib官方文档中的。 另一种方式是手动更改Matplotlib的配置文件`matplotlibrc`。你可以使用`matplotlib.matplotlib_fname()`函数来查找该文件的位置,并用文本编辑器打开它。在配置文件中找到字体相关的设置,并将其修改为支持中文的字体。具体的步骤可以参考和中提供的相关示例和文档。 总之,你可以根据个人的需求选择其中一种方式来解决Matplotlib中的中文乱码问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Python中使用matplotlib时显示中文乱码_(或更改字体)](https://blog.csdn.net/xiaochenXIHUA/article/details/130116221)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [【PythonMatplotlib处理中文乱码问题](https://blog.csdn.net/weixin_45718987/article/details/124584529)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值