使用matplotlib绘制一种经常在文献中出现的并列折线图。
附代码,并且来会单独说明一些绘制困难的点。
目录
效果图
效果图如下所示:
绘图代码
代码如下所示:
from matplotlib import pyplot as plt
x=range(0,4)
y_black=([4,5,16,18],[73,75,79,79],[11.5,12.3,15,14.7])
y_red=([18,17,23,25],[67,69,71,74],[13,13.8,15,14])
y_blue=([7,6,17,24],[70,70.5,77,79],[11.8,12.3,15,14.7])
figure=plt.figure(figsize=(11,3),dpi=80)
x_label=[13,32,37,103]
# 子图1
ax1=plt.subplot(131)
line_black, =plt.plot(x,y_black[0],linestyle='-',marker='s',color="black")
line_red, =plt.plot(x,y_red[0],linestyle=':',marker='o',color="red")
line_blue, =plt.plot(x,y_blue[0],linestyle='-.',marker='^',color="blue")
plt.xticks(x,x_label)
plt.yticks(list(range(5,31))[::5])
plt.xlabel("Parameter size(kb)")
# 子图2
ax2=plt.subplot(132)
line_black, =plt.plot(x,y_black[1],linestyle='-',marker='s',color="black")
line_red, =plt.plot(x,y_red[1],linestyle=':',marker='o',color="red")
line_blue, =plt.plot(x,y_blue[1],linestyle='-.',marker='^',color="blue")
plt.xticks(x,x_label)
ax2.set_xlabel("Parameter size(kb)")
plt.yticks([70,75,80])
plt.ylabel("Accuracy")
# 子图3
ax3=plt.subplot(133)
line_black, =plt.plot(x,y_black[2],linestyle='-',marker='s',color="black")
line_red, =plt.plot(x,y_red[2],linestyle=':',marker='o',color="red")
line_blue, =plt.plot(x,y_blue[2],linestyle='-.',marker='^',color="blue")
plt.xticks(x,x_label)
plt.xlabel("Parameter size(kb)")
plt.ylabel("Delay(s)")
plt.yticks(list(range(12,15))[::2])
figure.legend([line_black,line_red,line_blue],['A','B','C'],ncol=3,loc="upper center")
# plt.savefig("./t9.png")
plt.tight_layout()
plt.show()
1 数据元组
通过效果图可以发现要绘制的是A/B/C三线条在三个不同模式下的精度,并且x的刻度值是一样的,那么就说明三个图可以共用一个x的值,但是y值确不能共用。
因此根据y值的线条颜色建立了3个元组,每个元组分别有3个列表对应着3个图。
x=range(0,4)
y_black=([4,5,16,18],[73,75,79,79],[11.5,12.3,15,14.7])
y_red=([18,17,23,25],[67,69,71,74],[13,13.8,15,14])
y_blue=([7,6,17,24],[70,70.5,77,79],[11.8,12.3,15,14.7])
figure=plt.figure(figsize=(11,3),dpi=80)
x_label=[13,32,37,103]
2.子图位置subplot设置
由于3个图是并列的就会使用到pyplot中的subplot函数
其中subplot(x,y,z),x表示行数,y表示列数,z表示这张图在第几个区域。
# 子图1
ax1=plt.subplot(131)
# 子图2
ax2=plt.subplot(132)
# 子图3
ax3=plt.subplot(133)
3.线条颜色以及图例
线条颜色,首先明确plot的linestyle、marker、color属性,分别是线条形式、点标记、颜色(具体哪种形式对应哪种字母网上都可以查到)同时图片需要图例去介绍,所以为3类绘制的线条设置成line_black,line_red,line_blue方便图例显示。
下列代码以子图1为例:
line_black, =plt.plot(x,y_black[0],linestyle='-',marker='s',color="black")
line_red, =plt.plot(x,y_red[0],linestyle=':',marker='o',color="red")
line_blue, =plt.plot(x,y_blue[0],linestyle='-.',marker='^',color="blue")
图例显示一行代码即可:
figure.legend([line_black,line_red,line_blue],['A','B','C'],ncol=3,loc="upper center")
4. tight_layout填充空白修改间距
最开始没有加tight_layout()函数会显得,x轴的label距离图片过远,显得空白很大,如下图所示。
如果图很小的话label显示不出来。
显示出来后,图片又有点变形。
在plt.show前添加plt.tight_layout()即可。
plt.tight_layout()