centos中Python里的matplotlib画图中文显示方框问题

12 篇文章 0 订阅
9 篇文章 0 订阅

1.查看系统是否有可用的中文字体

from matplotlib.font_manager import FontManager
import subprocess
 
fm = FontManager()
mat_fonts = set(f.name for f in fm.ttflist)
print (mat_fonts)
output = subprocess.check_output('fc-list :lang=zh -f "%{family}\n"', shell=True)
print ('*' * 10, '系统可用的中文字体', '*' * 10)
print (output)
zh_fonts = set(f.split(',', 1)[0] for f in output.decode().split('\n'))
available = mat_fonts & zh_fonts
print ('*' * 10, '可用的字体', '*' * 10)
for f in available:
    print(f)

2.显示可用字体为无,则上传可用的中文字体

主要原因:linux系统以及matplotlib的字体库中,无可用的中文字体;matplotlib包默认只支持ASCII码,不支持unicode码

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

在Python中找到matplotlib的字体存放路径:

import matplotlib
matplotlib.matplotlib_fname()

运行的路径如下:

/root/anaconda3/lib/python3.6/site-packages/matplotlib/mpl-data/matplotlibrc

4.下载需要的字体

https://github.com/dolbydu/font(GitHub)

主要用到了SimHei.ttf这个字体,在GitHub的unicode中

将该字体上传到matplotlib字体存放路径下:/root/anaconda3/lib/python3.6/site-packages/matplotlib/mpl-data/font/ttf

5.然后在代码中加入如下代码即可

import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
font = FontProperties(fname="/root/anaconda3/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf/SimHei.ttf"
plt.rfParams['font.sans-serif']=[SimHei]

然后还需要再 xlabel、ylabel、title中加入参数 fontproperties=font:

plt.title(title,fontproperties=font)
plt.xlabel(x_name,fontproperties=font)
plt.ylabel(y_name,fontproperties=font)

运行代码即可解决中文显示方框的问题。

另外如有横轴有中文刻度时,需要在此处加入参数:

plt.xticks(rotation=rotation,fontproperties=font)

若有使用图例,则需要在legend中加入参数prop为font:

plt.legend(prop=font)

 

词云图报错:OSError  图像显示为方框

解决方法:将wordcloud中参数font_path设置为如下即可:(当然前提是已做上面的步骤,该路径有该字体)

font_path = "/root/anaconda3/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf/SimHei.ttf"

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值