解决在Linux系统下利用python matplotlib画图的中文显示为方框问题

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39121325/article/details/89310795

运行环境:

  • python3.6
  • ubuntu
  • conda3 下的matplotlib
  • jupyterLab

问题:

  • matplotlib画图,无法显示中文
  • 不加字体时,代码以及图显示如下:
  • import matplotlib.pyplot as plt
    import random
    from matplotlib.font_manager import FontProperties
    from pylab import *
    
    
    # 每隔两小时range(2, 26, 2) ,数据在x轴的数据, 可迭代
    x = range(2, 26, 2)
    y = [15, 16, 14, 17, 20, 25, 26, 24, 22, 18, 15, 10]
    
    
    fig = plt.figure(figsize=(20, 8), dpi=80) # (20, 8)宽20,高8,dpi设置图片清晰度, 让图片更加清晰
    plt.plot(x, y)
    
    # 设置x轴, y轴的刻度
    _xticks_labels = [i/2 for i in range(2, 49)]
    plt.xticks(_xticks_labels[: :4]) # 设置步长
    plt.yticks(range(min(y), max(y)+1))
    plt.title(u'中文')
    plt.show()

     

原因(可能还有其他原因):

  • linux操作系统以及matplotlib的字体库中,没有可用的中文字体
  • matplotlib包默认只支持ASCII码,不支持unicode码

解决问题:

1. 找到linux下matplotlib安装包下的字体文件库路径:

'/home/XXX/anaconda3/envs/env_keras_gpu/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf'

可以看到可能没有你需要的字体:

2. 下载你需要的字体

下载路径:https://github.com/dolbydu/font(GitHub)

百度网盘:链接:https://pan.baidu.com/s/1CB5gGp-A_IKJyIPFlNsMKw   提取码:9sef 

这是我自己下载的字体,还有需要下载别的字体的可以去GitHub上去下载

3. 将你下载的字体放在文件夹下

'/home/XXX/anaconda3/envs/env_keras_gpu/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf'

可以看到多出来这几个字体   微团雅黑-Microsoft Yahei.ttf,黑体-SimHei.ttf, 楷体-STKaiti.TTF

4. 字体下载好了,可以加入字体了

代码:

import matplotlib.pyplot as plt
import random
from matplotlib.font_manager import FontProperties

from pylab import *
fname = "/home/XXX/anaconda3/envs/env_keras_gpu/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf/STKaiti.TTF"
myfont = FontProperties(fname=fname)

# 每隔两小时range(2, 26, 2) ,数据在x轴的数据, 可迭代
x = range(2, 26, 2)
y = [15, 16, 14, 17, 20, 25, 26, 24, 22, 18, 15, 10]


fig = plt.figure(figsize=(20, 8), dpi=80) # (20, 8)宽20,高8,dpi设置图片清晰度, 让图片更加清晰
plt.plot(x, y)

# 设置x轴, y轴的刻度
_xticks_labels = [i/2 for i in range(2, 49)]
plt.xticks(_xticks_labels[: :4]) # 设置步长
plt.yticks(range(min(y), max(y)+1))
plt.title(u'中文',fontproperties=myfont)
plt.show()

此时的图如下:

好了,此时问题就解决了。。。。

还有其他的解决方法,大家也可以讨论讨论

 

大家可以关注我和我小伙伴的公众号~~~这里有我和我的小伙伴不定时的更新一些python技术资料哦!!大家也可以留言,讨论一下技术问题,希望大家多多支持,关注一下啦,谢谢大家啦~~

 

 

展开阅读全文

没有更多推荐了,返回首页