技巧篇:LINUX解决matplotlib绘图中文字体乱码

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


[参考1:解决Linux系统下python matplotlib中文字体显示问题](解决Linux系统下python matplotlib中文字体显示问题)

[参考2:matplotlib图例中文乱码?](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
# 如果没有fc-list命令,则通过以下命令行进行安装
#yum  -y  install  fontconfig

output:

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

如果没有,则可以从本地copy一份simhei.ttf文件到服务器,本地路径C:\Windows\Fonts;或者从网上下载一份[SimHei下载地址](SimHei Font - Free Font Download);

通过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 -rf ~/.cache/matplotlib
#如果有字体,绘图还是显示小方块,则需要强力删除
rm -rf ~/.matplotlib/*.cache

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

python console:
from matplotlib.font_manager import _rebuild
_rebuild() #reload一下

编辑于 2022-06-09 16:49