欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python用matplotlib作图时,中文标注显示乱码为小方框

程序员文章站 2024-01-19 20:06:46
...

使用matplotlib做图时,无法正确显示中文,乱码为小方框,主要是因为默认时,找不到字体.

/bin/env python 
# -*- coding:utf-8 -*-
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

x = np.arange(100, 600, 100)
train_1 = [11.8193, 28.0856, 36.3845, 62.8033, 95.7671]
train_2 = [70.8071, 242.193, 299.432, 377.331, 390.672]

plt.plot(x, train_pre_5, c='blue', marker='o', ms=4, label='精度<=10*e-5')
plt.plot(x, train_pre_6, c='red', marker='s', ms=4, label='精度<=10*e-6')
#plt.xticks(x)
plt.xlim(50, 550)
plt.ylim(-10, 410)
plt.xlabel('样本',fontproperties=font)
plt.ylabel('用时/s', fontproperties=font)
plt.savefig("./1.png")
plt.show()

运行上述代码,中文为小方框.
解决方法:
一:全局设置

import matplotlib as mpl
#配置之后便可使用
mpl.rcParams['font.family']='SimHei'
mpl.rcParams['font.sans-serif']=['SimHei']
mpl.rcParams['axes.unicode_minus']=False

二:局部设置

from matplotlib.font_manager import FontProperties 
font = FontProperties(fname=r"/usr/share/fonts/SIMLI.TTF")
plt.xlabel('样本',fontproperties=font)
plt.ylabel('用时/s', fontproperties=font)

由于图例plt.legend()要展示中文,此时得换用方法plt.legend(prop=my_font)

plt.legend(prop=font, loc="upper left")

其中,loc指定图例位置.

注:
ubuntu中部分中文字体缺失,所以可以从windows系统在中拷贝相关字体,但"c:\windows\fonts"下的字体,ttf文件为软连接,拷贝后无效,TTF文件可以使用.(暂没有找到好的解决办法)

参考:
1.
https://blog.csdn.net/yanpenggong/article/details/82730285
2.
https://blog.csdn.net/qq_44912982/article/details/107131711