Ubuntu环境下 matplotlib 图例中文乱码

本文详细介绍如何在Matplotlib中正确显示中文,包括字体文件的放置位置、配置文件的修改方法及清除缓存步骤。

本文前提条件是 已经 安装好 matplotlib  ,  至于 matplotlib 是什么, 怎么安装, 本文不予介绍。

 

 

 

 

首先在  Windows  盘区下  找到   微软雅黑   的字体文件:

 

 

其次,找到 matplotlab  字体库  文件夹    或者   系统字体库文件夹

 

matplotlab  字体库  文件夹

 

 

 

系统字体库文件夹

 

把字体文件拷贝到这两个路径下的任何一个都可以。

 

 

然后,找到 matplotlib  配置文件

 

 

可以直接修改该文件,或者

 

 

然后,  修改配置文件。

编辑该配置文件,找到 font.family ,将注释去掉,在下面的 font.sans - serif :Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial,Helvetica, Avant Garde, sans - serif 加上中文字体 Microsoft YaHei 。

 

 

 

最后,清除缓存

做了上面的更改,发现并没有什么用。

到 ~/.cache/matplotlib下的文件删掉,就ok了。

 

 

 

 

 

 

 










      本文转自zsdnr  51CTO博客,原文链接:http://blog.51cto.com/12942149/1932704,如需转载请自行联系原作者







<think>我们正在解决Ubuntumatplotlib显示中文的问题。根据引用,问题通常是由于matplotlib默认字体不支持中文或字体路径不匹配导致的。解决方案包括安装中文字体、配置matplotlib使用该字体,以及清除缓存。步骤:1.安装中文字体(如SimHei)到系统中。2.将字体文件复制到matplotlib的字体目录。3.删除matplotlib的缓存文件。4.在代码中设置matplotlib的字体。具体操作:第一步:安装中文字体(以SimHei为例)可以通过以下命令安装常用中文字体包(包含SimHei等): ```bashsudo aptinstall fonts-wqy-microhei#文泉驿微米黑,包含常用中文字体sudo aptinstall fonts-wqy-zenhei#文泉驿正黑```或者,手动下载SimHei.ttf(黑体)字体文件,然后将其复制到系统字体目录: ```bash#创建用户字体目录(如果不存在)mkdir-p~/.fonts#将下载的SimHei.ttf复制到该目录cp /path/to/SimHei.ttf~/.fonts/#更新字体缓存fc-cache -fv```第二步:将字体文件复制到matplotlib的字体目录找到matplotlib的字体目录,通常位于: ```bashpython-c"importmatplotlib;print(matplotlib.matplotlib_fname())" ```该命令会输出matplotlib的配置文件路径,如:`/usr/local/lib/python3.8/dist-packages/matplotlib/mpl-data/matplotlibrc`,则字体目录通常是在该路径下的`fonts/ttf`目录。或者,使用以下命令找到字体目录:```bashpython-c"importmatplotlib;print(matplotlib.get_cachedir())"```缓存目录的上一级通常是`mpl-data`,其下就有`fonts/ttf`。通常,我们可以直接将字体文件复制到matplotlib的字体目录(例如:`/usr/local/lib/python3.8/dist-packages/matplotlib/mpl-data/fonts/ttf/`)或用户级别的目录(例如:`~/.local/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/`)。第三步:删除matplotlib的缓存缓存目录可以通过以下命令找到: ```bashpython -c "import matplotlib; print(matplotlib.get_cachedir())"```通常,缓存目录在`~/.cache/matplotlib`。删除该目录下的所有文件: ```bashrm -rf ~/.cache/matplotlib/*```第四步:在代码中设置字体在Python代码中,我们可以通过以下方式设置字体:```pythonimportmatplotlib.pyplotas pltplt.rcParams['font.sans-serif'] =['SimHei']#用来正常显示中文标签plt.rcParams['axes.unicode_minus'] =False#用来正常显示负号```或者,使用更通用的方法(指定一个已安装的中文字体):```pythonimportmatplotlib asmplmpl.rc('font',family='SimHei')```如果上述方法不起作用,可以尝试使用绝对路径指定字体文件(较少用):```pythonfrommatplotlib.font_manager importFontPropertiesfont= FontProperties(fname='/path/to/font/SimHei.ttf')#然后在绘图时指定fontproperties=font```注意:有时需要重启Python内核或重新运行脚本。示例代码: ```pythonimport matplotlib.pyplot aspltplt.rcParams['font.sans-serif']= ['WenQuanYiMicro Hei','SimHei', 'DejaVu Sans']#可以指定多个字体,依次尝试plt.rcParams['axes.unicode_minus'] =Falseplt.plot([1,2,3], [4,5,6]) plt.title('中文标题') plt.show()```如果仍然无法显示,请检查:1.字体是否安装成功:使用`fc-list :lang=zh`查看系统中已安装的中文字体。2.是否删除了matplotlib的缓存。3.在代码中是否成功设置了字体。引用说明: [^1]:参考了安装中文字体和配置matplotlib的步骤。 [^2]:解释了乱码的原因:默认字体不支持中文或路径不匹配。 [^3]:提到了重建字体缓存的方法。 [^4]:强调了正确配置中文字体在数据可视化中的重要性。 [^5]:提到了手动下载字体并复制到matplotlib字体目录的方法。相关问题:1.如何在Ubuntu中安装其他中文字体?2.如果使用Jupyter Notebook,配置matplotlib字体有什么不同?3.除了SimHei,还有哪些常用的中文字体可以在matplotlib中使用?4.如何解决matplotlib中负号显示为方框的问题?5.如何永久设置matplotlib的默认字体,避免每次在代码中设置?</think>### Ubuntu下配置Matplotlib支持中文字体显示 在Ubuntu系统中配置Matplotlib显示中文字体需要解决两个核心问题:**安装支持中文的字体** 和 **正确配置Matplotlib字体路径**。以下是详细步骤: #### 步骤1:安装中文字体(以文泉驿字体为例) ```bash # 安装常用中文字体包 sudo apt install fonts-wqy-microhei # 文泉驿微米黑 sudo apt install fonts-wqy-zenhei # 文泉驿正黑 # 验证安装 fc-list :lang=zh | grep "WenQuanYi" ``` #### 步骤2:定位Matplotlib字体配置目录 ```bash # 获取Matplotlib配置路径 python -c "import matplotlib; print(matplotlib.matplotlib_fname())" # 示例输出:/usr/local/lib/python3.8/dist-packages/matplotlib/mpl-data/matplotlibrc # 进入字体目录(ttf文件夹) cd /path/to/matplotlib/mpl-data/fonts/ttf ``` #### 步骤3:配置Matplotlib使用中文字体 1. **修改配置文件** 打开步骤2获取的`matplotlibrc`文件: ```bash sudo nano /path/to/matplotlib/mpl-data/matplotlibrc ``` 修改以下参数: ```ini font.family : sans-serif font.sans-serif : WenQuanYi Micro Hei, DejaVu Sans, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif axes.unicode_minus : False # 解决负号显示问题 ``` 2. **清除缓存**(关键步骤) ```bash rm -rf ~/.cache/matplotlib/* ``` #### 步骤4:代码中强制指定字体 ```python import matplotlib.pyplot as plt import matplotlib as mpl # 方法1:全局设置 plt.rcParams['font.sans-serif'] = ['WenQuanYi Micro Hei'] plt.rcParams['axes.unicode_minus'] = False # 方法2:单次设置 plt.title("中文标题", fontname="WenQuanYi Micro Hei") ``` #### 验证配置 ```python import matplotlib.pyplot as plt plt.plot([1,2,3], [4,5,6]) plt.title("中文标题测试 - 成功显示") plt.xlabel("X轴标签") plt.ylabel("Y轴标签") plt.show() ``` #### 常见问题解决 1. **字体仍不显示**: - 手动复制字体到Matplotlib目录: ```bash cp /usr/share/fonts/truetype/wqy/wqy-microhei.ttc /path/to/matplotlib/mpl-data/fonts/ttf/ ``` - 重建字体缓存: ```python import matplotlib.font_manager matplotlib.font_manager._rebuild() ``` 2. **Jupyter环境问题**: - 在Jupyter Notebook首行添加: ```python %matplotlib inline from matplotlib.font_manager import _rebuild _rebuild() # 重建字体缓存 ``` > **关键原理**:Matplotlib默认使用英文字体库,通过将中文字体添加到其字体路径并清除缓存,使字体引擎能正确加载中文渲染能力[^2][^4]。文泉驿字体是Ubuntu官方源支持的开源中文字体,兼容性最佳[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值