开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 22 天,点击查看活动详情
本文介绍matplotlib绘图方法,包括应用于Jupyter Notebook和Linux服务器脚本(无图形显示,因此需要保存到本地才能看到图片)的场景。
最近更新时间:2022.12.7 最早更新时间:2022.12.6
官方文档(很不好用):Matplotlib documentation — Matplotlib 3.6.2 documentation
@[toc]
1. 简单的完整示例
- 画2个折线图保存到本地,起中文标题,每张图都画两条折线,附中文图例。但是电脑上没有中文字体,所以使用用户路径下的字体文件
import random
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
loss1=[random.gauss(mu=10,sigma=1) for _ in range(10)]
loss2=[random.gauss(mu=11,sigma=1) for _ in range(10)]
acc1=[random.uniform(0.5,0.6) for _ in range(10)]
acc2=[random.uniform(0.4,0.5) for _ in range(10)]
font = FontProperties(fname='other_data_temp/simkai.ttf')
plt.rcParams['axes.unicode_minus']=False
plt.title('示例图片1:模拟模型双损失函数绘图',fontproperties=font)
plt.plot(loss1, label="训练集loss")
plt.plot(loss2, label="验证集loss")
plt.legend(prop=font)
plt.savefig('try1.png')
plt.close() #为了防止多图冲突
plt.title('示例图片2:模拟模型双accuracy绘图',fontproperties=font)
plt.plot(acc1, label="训练集acc")
plt.plot(acc2, label="验证集acc")
plt.legend(prop=font)
plt.savefig('try2.png')
plt.close()
- 画组合图:在图中画不同x/y刻度的柱形图和折线图,其他配置与上图类似(注意这个
plt.title()如果位置放得太靠前会导致标题显示不出来)
import random
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
font = FontProperties(fname='other_data_temp/simkai.ttf')
x=[i for i in range(10)]
y1=[random.gauss(mu=10,sigma=1) for _ in range(10)]
y2=[random.uniform(0,1) for _ in range(10)]
plt.rcParams['figure.figsize'] = (12,5)
#画柱形图
fig,ax1=plt.subplots()
ax1.bar(x,y1,alpha=.7,color='g')
ax1.set_ylabel('损失函数',fontsize='15',fontproperties=font)
#画折线图
ax2=ax1.twinx() #组合图必须加这个
ax2.plot(x,y2,'r',ms=10)
ax2.set_ylabel('ACC',fontsize='15',fontproperties=font)
plt.title('示例图片:模拟柱形图损失函数+折线图ACC共图',fontproperties=font)
plt.savefig('try2.png')
示例图像:
2. 绘图 plot()
除了在plt上之外,还可以放到轴上。
- 折线图
plt.plot(y):x就是y的元素索引plt.plot(x,y)
- 柱形图
plt.bar(x,y)
- 其他属性
label:图例color:设置颜色(可以参考How to set Color for Bar Plot in Matplotlib?一文markersize或ms
3. 保存到本地和展示
plt.savefig(图片名)- 连存多张图片时,每一张写完都要写
plt.close(),否则上一张会画到下一张上
4. 字体
字体对象:
from matplotlib.font_manager import FontProperties
font = FontProperties(fname='字体文件位置')
在plt.title()、set_ylabel()中用fontproperties参数传入
在plt.legend()中用prop参数传入
5. plt其他函数
plt.title(标题名)fontproperties:字体对象
plt.subplots()set_ylabel(标签名)fontsizefontproperties:字体对象
6. plt基础设置
- 设置图形大小:
plt.rcParams['figure.figsize'] = (12,5)