ubuntu系统下matplotlib中文乱码问题的解决方法

在ubuntu 下利用matplotlib 绘图的时候,图像上中文无法显示。以下是我的解决办法:

注意下面复制字体路径与配置文件路径跟Python环境路径有关

1. 下载中文字体simhei.ttf, 网址为http://fontzone.net/download/simhei

或者直接从Windows 拷贝

2. 复制字体

对于复制字体,有两种方式,一种是放在系统字体目录下,一种是放在matplotlib的字体目录下。

2.1 复制字体到系统目录

搜索 matplotlib 字体的安装位置locate -b '\mpl-data',会得到这个路径/usr/share/matplotlib/mpl-data下面有fonts/ttf这个目录,进入这个目录,把刚才下载的simhei.ttf 字体复制到这个目录下,注意权限和归属是否与其它字体一致,我的是归于root用户的,所以用root 用户复制过来。

2.2 复制字体到matplotlib目录

查看matplotlib配置文件位置。

1
2
3
4
In [6]: import matplotlib

In [7]: print(matplotlib.matplotlib_fname())
/root/anaconda3/lib/python3.8/site-packages/matplotlib/mpl-data/matplotlibrc

matplotlib的字体目录就是/root/anaconda3/lib/python3.8/site-packages/matplotlib/mpl-data/,下载字体放到里面。

3. 查看matplotlib配置文件位置

1
2
3
>>> import matplotlib
>>> print matplotlib.matplotlib_fname()
/usr/local/lib/python2.7/site-packages/matplotlib/mpl-data/matplotlibrc

4. 修改配置文件

去除这三列之前的‘#’

在font.sans-serif后添加,SimHei

1
2
3
4
#font.family         : sans-serif        
#font.sans-serif : SimHei, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
...
#axes.unicode_minus : False #解决负号'-'显示为方块的问题

5. 删除当前用户matplotlib 的缓冲文件(如果没有直接进入第四步)

1
2
cd ~/.cache/matplotlib
rm -rf *.*

6.代码中调整字体

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/env python
#coding:utf-8
"""a demo of matplotlib"""
import matplotlib as mpl
from matplotlib import pyplot as plt
mpl.rcParams[u'font.sans-serif'] = ['simhei']
mpl.rcParams['axes.unicode_minus'] = False
years = [1950, 1960, 1970, 1980, 1990, 2000, 2010]
gdp = [300.2, 543.3, 1075.9, 2862.5, 5979.6, 10289.7, 14958.3]
#创建一副线图,x轴是年份,y轴是gdp
plt.plot(years, gdp, color='green', marker='o', linestyle='solid')
#添加一个标题
plt.title(u'名义GDP')
#给y轴加标记
plt.ylabel(u'十亿美元')
plt.show()

  • 其中#coding:utf-8 说明文件编码格式
  • mpl.rcParams[u’font.sans-serif’] = [‘simhei’] 用simhei 字体显示中文
  • mpl.rcParams[‘axes.unicode_minus’] = False 这个用来正常显示负号
  • plt.title(u’名义GDP’)这里的u 最好不要少
------ 本文结束------
坚持原创技术分享,您的支持将鼓励我继续创作!

欢迎关注我的其它发布渠道