1.模块
from matplotlib import pyplot as plt
from pylab import *
import numpy as np
2.画图
# x, y轴
x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = np.array([1, 2, 3, 4, 5])
# 设置画布大小 1200*600
plt.figure(figsize=(12, 6))
# 设置标题
plt.title(u"全线xx监测曲线", fontproperties=zhfont1, color="black", fontsize=15)
plt.title(u"当前路线:%s 数据采集时间: %s" % ("A线路", "2019-10-10"), loc='left', pad=0.8, fontproperties=zhfont1, fontsize=8)
# 确定x, y轴范围
# plt.yticks([0, 1, 2, 3, 4, 5])
plt.xticks(x, ["A", "B", "C", "D", "E", "F", "G", "H"], rotation=0, fontsize=10)
# 设置x,y轴文字和字体大小
plt.xlabel(u"编号", fontproperties=zhfont1, fontsize=12)
plt.ylabel(u"xx厚度(mm)", fontproperties=zhfont1)
# 添加网格
plt.grid(linewidth=0.2)
# 设置画图线条的粗细
plt.plot(i[0], i[1], label=u"xx厚度", color="blue")
# 添加图例
plt.legend(ncol=2)
# 添加最高点
plt.plot([i[0], i[0]], [0, i[1]], linestyle="--")
# 去掉上右两条边框
ax = plt.gca()
ax.spines["right"].set_color('none')
ax.spines["top"].set_color('none')
# 对标点处做注释
bbox = dict(boxstyle="round", facecolor='gray', alpha=0.3, pad=1)
plt.annotate(u"编号:#%s-#%s xx厚度:%smm" % (i[0], i[0]+1, str(i[1])),
xy=(i[0], i[1]),
xytext=(i[0] - 10, i[1]-70),
xycoords="data",
textcoords='offset points',
bbox=bbox,
)
plt.show()
plt.close('all')
三 解决中文不显示的问题
matplotlib.rcParams["font.family"] = "SimHei"
matplotlib.rcParams["font.size"] = 12
# fname 为下载的字体库路径,注意SimHei.ttf字体的路径
zhfont1 = matplotlib.font_manager.FontProperties(fname="SimHei.ttf")
1. 由于我是在ubuntu下使用miniconda,在这种情况下,出现中文不显示的问题。
就如下面这样:
UserWarning: findfont: Font family ['SimHei'] not found. Falling back to DejaVu Sans.
我是先下载了 SimHei.ttf 放在了下面路径里面,看网上说能永久解决中文乱码的情况。
miniconda3/envs/spider_code/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf/
可是这样设置了之后,我还是报上面的这个错误,部分显示了中文:
2. 由于上面部分解决了问题,图片中图例,注释信息仍然中文显示乱码,所以尝试修改对应目录的文件matplotlibrc
, 类似下面的路径
/home/huanghy/miniconda3/envs/spider_code/lib/python3.6/site-packages/matplotlib/mpl-data/matplotlibrc
进到该文件中,找到下面三个部分,去掉前面的#注释,做出对应修改 :
找到以下三条信息,去掉前面的#
1.修改后面的值为SimHei
font.family : SimHei
2.添加 SimHei
font.sans-serif : SimHei, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
3.将默认的True改为False
axes.unicode_minus : False #解决负号'-'显示为方块的问题
3.改完之后按道理来说应该就可以了,可是运行的时候仍然出现上面的报错。纠结了好久,也查了好久,发现matplotlib是有缓存的,必须要清除缓存后才能正常显示中文,matplotlib的默认缓存位置我放在下面,最后,总算解决了中文现实乱码的 问题,总结一下,其实这是个很简单的小问题,用点心就能够很快解决。
~/.cache/matplotlib