LINUX系统python通过matplotlib绘图中文字体乱码

LINUX系统python通过matplotlib绘图中文字体乱码,解决服务器里面没有字体的问题:

查看环境 input: 终端

cat /etc/redhat-release

output:

CentOS Linux release 7.4.1708 (Core)

服务器里面的字体路径,后续会更改该文件内容中的参数配置: input: python

import matplotlib
matplotlib.matplotlib_fname()

output:

/usr/local/anaconda/lib/python3.6/site-packages/matplotlib/mpl-data/matplotlibrc

首先查看系统内的中文字体,终端输入,查看是否存在相关字体: input:

fc-list :lang=zh

output:

/usr/share/fonts/ch_hei/wen_quan_yi_hei.ttf: WenQuanYi Zen Hei Mono,文泉驛等寬正黑,文泉驿等宽正黑:style=Medium,中等

如果没有,则可以从本地copy一份simhei.ttf文件到服务器,本地路径C:WindowsFonts;或者从网上下载一份; 通过SecureCRT中的SFTP进行文件传输,采用put方法;堡垒机用,rz file_path 上传到服务器的文件夹,在 /usr/share/fonts 路径下创建存放此字体的文件夹yourfontdir,并下载的ttf文件复制到yourfontdir中,如果没有fonts,可以通过mkdir建立;

cd /usr/share/fonts/yourfontdir
rz file_path

上传完毕后,需要在服务器内安装存放的字体,mkfontscale和mkfontdir,或者fontconfig; 如果mkfontscale命令无效,那么需要在linux里面先安装:

yum install -y fontconfig mkfontscale
#生成字体索引信息. 会显示字体的font-family
sudo mkfontscale
sudo mkfontdir
fc-cache #更新字体缓存

然后修改matplotlibrc文件配置,进入到文件路径,vi文件并进行通过i操作进行修改,取消以下几行的注释,删除#号,改好之后esc退出,英文状态下:wq保存退出:

font.family         : sans-serif 
font.sans-serif     : SimHei, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif,WenQuanYi Zen Hei Mono
axes.unicode_minus  : False #这里要把True改为False,作用就是解决负号-显示为方块的问题

将配置好的ttf字体复制一份到matplotlib的字体文件夹内:

mv /usr/share/fonts/yourfontdir/simhei.ttf /usr/local/anaconda/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf
#删除缓冲目录
rm ~/.cache/matplotlib
#如果有字体,绘图还是显示小方块,则需要强力删除
rm -rf ~/.matplotlib/*.cache

此时字体已经存在于服务器,配置改了之后不会生效,需要在python内重新加载,即:

python console:
from matplotlib.font_manager import _rebuild
_rebuild() #reload一下
经验分享 程序员 微信小程序 职场和发展