Mac/Linux系统matplotlib中文支持问题

背景

matplotlib是python中最常用的数据可视化分析工具,Mac和Linux系统无中文字体,不支持中文显示(希望后续可以改进),需要进行字体的下载和设置才能解决。笔者经过实践,发现Mac系统和Linux系统解决方案略有区别,因此分别记录一下,供读者参考。

Mac系统

详细步骤:

step 1. 网上下载字体SimHei.ttf(已上传到本文资源,点击文章顶部SimHei.ttf进行下载)

step 2. 将字体复制到matplotlib/mpl-data/matplotlibrc/fonts/ttf文件夹下

首先,在mac终端(cmd)输入python,进入python界面,然后输入以下代码查找matplotlib字体路径文件夹

bash 复制代码
import matplotlib
print(matplotlib.matplotlib_fname())

我输出的路径地址是:

/usr/local/lib/python3.11/site-packages/matplotlib/mpl-data/matplotlibrc

把下载好的SimHei字体拷贝到ttf文件夹里:

/usr/local/lib/python3.11/site-packages/matplotlib/mpl-data/matplotlibrc/fonts/ttf

Mac系统文件夹不好找,方法:按Shift+Command+G,然后输入上述文件地址,点击"前往文件夹",然后把字体copy到文件夹下

step 3. 修改matplotlibrc配置文件,修改内容如下3项:

bash 复制代码
font.family:  sans-serif
# 去掉前面的# 
font.sans-serif: SimHei, DejaVu Sans, Bitstream Vera Sans,
# 去掉前面的#,并在冒号后面添加SimHei
axes.unicode_minus: False  # use Unicode for the minus symbol rather than hy    phen.  See
# 去掉前面的#,并将True改为False

step 4. 删除matplotlib的系统缓存

关闭所有python终端界面,在终端运行如下命令:

bash 复制代码
rm -rf ~/.matplotlib/*

或者 运行如下命令,查找matlib缓存地址

bash 复制代码
import matplotlib
print(matplotlib.get_cachedir())

假设输出为/Users/feilong/.matplotlib,运行

bash 复制代码
rm -rf /Users/feilong/.matplotlib

step 5. 需要重启jupyter notebook kenel,测试是否成功

测试如下代码,如果能够在输出图片中能够显示"中文",则配置成功。

bash 复制代码
import matplotlib
import matplotlib.pyplot as plt

# from matplotlib import font_manager as fm, rcParams
# plt.rcParams['font.sans-serif']=['SimHei'] # 修改了matplotlibrc后不需要
# plt.rcParams['axes.unicode_minus']=False   # 修改了matplotlibrc后不需要
 
# 创建一个图像
plt.figure()
 
# 添加文本
plt.text(0.5, 0.5, '中文', fontsize=20, fontweight='bold', color='blue')
 
# 显示图像
plt.show()

至此,Mac系统中matplotlib中文显示的问题就解决了

Linux系统

Linux系统的matplotlib中文支持解决方案和Mac类似,但Linux上可能没有图形化操作界面(特别是服务器),需要使用命令行操作模式。

step1:相同,如果没有浏览器,可以使用wget命令进行下载

step 2. 将字体复制到matplotlib/mpl-data/matplotlibrc/fonts/ttf文件夹下

假设SimHei.ttf字体存放在/mnt/workspace目录下,需要copy到/home/pai/lib/python3.11/site-packages/matplotlib/mpl-data/fonts/ttf/目录下

bash 复制代码
cp -r /mnt/workspace/SimHei.ttf /home/pai/lib/python3.11/site-packages/matplotlib/mpl-data/fonts/ttf/

step 3. 修改matplotlibrc配置文件,修改内容如下3项

需要使用vim编辑器来打开和编辑配置文件

bash 复制代码
# 进入文件夹
cd /home/pai/lib/python3.11/site-packages/matplotlib/mpl-data/
# 使用vim 打开配置文件
vim matplotlibrc

# 按I键开启insert模式,此时命令行终端出现"INSERT"字样,进行配置修改
# 修改完成按ESC键返回浏览模式
# 按shift+:键,此时命令行终端出现":"字样,然后输入wq(保存并退出),修改完成

step 4. 删除matplotlib的系统缓存

关闭所有python终端界面,查找缓存地址,在终端运行如下命令:

bash 复制代码
import matplotlib
print(matplotlib.get_cachedir())

print输出:/root/.cache/matplotlib ,清除matplotlib缓存

bash 复制代码
rm -rf /root/.cache/matplotlib

后续步骤相同

参考文章:

1.https://zhuanlan.zhihu.com/p/449589031

2. Mac系统jupyter notebook中matplotlib中文无法显示的解决办法_notebook plt画图中文不显示-CSDN博客

相关推荐
霍夫曼11 分钟前
UTC时间与本地时间转换问题
java·linux·服务器·前端·javascript
月熊1 小时前
在root无法通过登录界面进去时,通过原本的普通用户qiujian如何把它修改为自己指定的用户名
linux·运维·服务器
大江东去浪淘尽千古风流人物2 小时前
【DSP】向量化操作的误差来源分析及其经典解决方案
linux·运维·人工智能·算法·vr·dsp开发·mr
赖small强2 小时前
【Linux驱动开发】NOR Flash 技术原理与 Linux 系统应用全解析
linux·驱动开发·nor flash·芯片内执行
IT运维爱好者4 小时前
【Linux】LVM理论介绍、实战操作
linux·磁盘扩容·lvm
LEEE@FPGA4 小时前
ZYNQ MPSOC linux hello world
linux·运维·服务器
郝学胜-神的一滴4 小时前
Linux定时器编程:深入理解setitimer函数
linux·服务器·开发语言·c++·程序人生
冉佳驹4 小时前
Linux ——— 系统中的用户身份切换、文件权限管理、特殊权限和粘滞位设置
linux·chmod·chown·粘滞位·su 命令·chgrp·umask
Tranquil_ovo4 小时前
【Linux】Makefile 基础
linux
漏洞文库-Web安全4 小时前
Linux逆向学习记录
linux·运维·学习·安全·web安全·网络安全·逆向