解决 Linux 下使用 matplotlib 中文乱码问题
1.出现的问题
以下面这个代码为例:
1 | import numpy as np |
在 Linux 下使用 Python 的matplotlib
包默认是会出现乱码的:
2.解决方法
首先需要下载字体,网上常用的中文字体是SimHei
,下载地址
2.1 方式一:直接在代码中引入
1 | import matplotlib.font_manager as fm |
2.2 方式二:修改配置文件
- 查找存放字体的文件夹
1 | import matplotlib |
运行这段代码会打印出字体存放路径,如:
1 | /home/sky/miniconda3/envs/test/lib/python3.12/site-packages/matplotlib/mpl-data/matplotlibrc |
matplotlibrc
是配置文件,一会儿要修改的。然后进入存放字体的目录下:
1 | cd /home/sky/miniconda3/envs/test/lib/python3.12/site-packages/matplotlib/mpl-data/fonts/ttf |
把下载好的字体文件SimHei.ttf
复制到ttf
目录下:
1 | cp ~/下载/SimHei.ttf . |
然后回到mpl-data
目录下,修改matplotlibrc
文件:
1 | nano matplotlibrc |
找到font.serif
,font.sans-serif
所在位置,如下如所示。在冒号后面加入SimHei
,保存退出:
原来的:
1
2#font.serif: DejaVu Serif, Bitstream Vera Serif, Computer Modern Roman, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif
#font.sans-serif: DejaVu Sans, Bitstream Vera Sans, Computer Modern Sans Serif, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif修改后的:
1
2#font.serif: SimHei, DejaVu Serif, Bitstream Vera Serif, Computer Modern Roman, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif
#font.sans-serif: SimHei, DejaVu Sans, Bitstream Vera Sans, Computer Modern Sans Serif, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
- 清理缓存
查找缓存位置:
1 | import matplotlib |
把缓存文件删除即可:
1 | rm ~/.cache/matplotlib -rf |
3.解决示例
3.1 参考教程
4.负号乱码解决
只要在前面加以段这个代码:
1 | # 解决负号显示问题 |
就能正常显示负号
- Title: 解决 Linux 下使用 matplotlib 中文乱码问题
- Author: loskyertt
- Created at : 2024-09-14 15:01:53
- Updated at : 2025-01-05 06:26:00
- Link: https://redefine.ohevan.com/2024/09/14/linux-matplotli乱码解决/
- License: This work is licensed under CC BY-NC-SA 4.0.
Comments