官方文档 https://matplotlib.org/stable/api/matplotlib_configuration_api.html
安装
pip install matplotlib
使用
中文字体
默认不支持中文字体,需要自己添加字体库
windows在设置里面找文件后缀要是ttf 如
C:\Windows\Fonts\SimHei.ttf
linux用命令fc-list可查看有哪些字体,筛选出中文使用fc-list :list=zh
如果没有建议直接把windows上面的复制到linux的某个目录下
from matplotlib.font_manager import FontProperties
font = FontProperties(fname="C:\Windows\Fonts\SimHei.ttf", size=14)
# 在哪个地方用就把font放到哪
plt.xlabel("时间\n参数", fontsize=14, fontproperties=font, loc="left")
plt.legend(loc="upper left", prop=font)
画图
plt.plot(x, y)就是画线,写几个就是画几条线,注意横纵坐标就行
from matplotlib import pyplot as plt
x = [i for i in range(2, 26, 2)]
y = [15, 13, 14.5, 17, 20, 24, 26, 26, 27, 22, 18, 15]
plt.plot(x, y)
plt.show()
plot一些参数
color='#ACEFD1' 可以填颜色英文或十六进制
label='线条标签' 在图片上显示这条线的说明 需搭配legend
linewidth=1.0 线条粗细
设置横纵坐标轴
纵坐标默认会根据数量大小自动选择合适的区间和数量来显示
横坐标需要自己手动设置,不然会很密集
plt.xticks(x) # 以传入的值数量来确定x轴点数
plt.xlabel("im x", fontsize=20)
plt.yticks(x)
plt.ylabel("im y", fontsize=20)
横坐标太密
我的做法是将横坐标的列表分段,如下分成10段
import matplotlib.ticker as ticker
n = len(x)//10
plt.gca().xaxis.set_major_locator(ticker.MultipleLocator(n))
横纵坐标加上单位
就是给纵坐标拼接一个字符串 如拼接一个Mb,以纵坐标为例
括号里的写法跟print()一样 根据你实际纵坐标的值来
import matplotlib.ticker as ticker
unit = 'Mb'
plt.gca().yaxis.set_major_formatter(ticker.FormatStrFormatter(f'%d {unit}'))
横坐标不从零点开始,纵坐标零点不显示
加上如下即可
plt.ylim(ymin=-0.005)
plt.xlim(xmin=-0.005)
横纵坐标说明
这个说明是显示在横坐标下方的,font为前面的字体
plt.xlabel("我是横", fontsize=14, fontproperties=font, loc="left")
plt.ylabel("我是纵", fontsize=14, fontproperties=font)
每条线添加说明
这个是在图片上标注的,写好lable和legend即可,prop后面是字体,loc不会填写个错的看报错会全报出来
plt.plot(x, y_in, color='#ACEFD1', label='入流量', linewidth=1.0)
plt.plot(x, y_out, color='#5EA9EE', label='出流量', linewidth=1.0)
plt.legend(loc="upper left", prop=font)
最高点显示坐标
拿到y轴列表里最大值的索引,写好显示的坐标格式或别的什么,plt.annotate加上即可
以下为两条线的最高点,最低点拿最小值索引即可
# y_out, y_in是我的两个y轴列表
y_out_max = y_out.index(max(y_out))
y_in_max = y_in.index(max(y_in))
max_out_info = str(y_out[y_out_max]) + ',' + x[y_out_max]
max_in_info = str(y_in[y_in_max]) + ',' + x[y_in_max]
plt.annotate(max_out_info, xy=(y_out_max, y_out[y_out_max]))
plt.annotate(max_in_info, xy=(y_in_max, y_in[y_in_max]))
添加网格
alpha透明度,:表示虚线
plt.grid(alpha=0.4, linestyle=':')
填充颜色
这个填充颜色的填充两条线之间的颜色,如果想填充某条线到x轴的颜色,我是直接画成粗一点的柱状图
plt.fill_between(x, y_in, y_out, facecolor='blue')
# plt.bar(x, y_in, color='#ACEFD1',label='入流量', width=1.5)
设置图片大小
# figsize是尺寸 dpi是像素 自己慢慢调
plt.figure(figsize=(20, 8), dpi=80)
保存图片
bbox_inches参数减少图片周围的空白区域
plt.savefig("./test.jpg", bbox_inches='tight')