[LINUX系统python通过matplotlib绘图中文字体乱码 - 知乎](https://zhuanlan.zhihu.com/p/81262346 )]
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一下