matplotlib绘制一行三列图通常用做文献图片

使用matplotlib绘制一种经常在文献中出现的并列折线图。

附代码,并且来会单独说明一些绘制困难的点。

目录

效果图

绘图代码

1 数据元组 

2.子图位置subplot设置

3.线条颜色以及图例

4. tight_layout填充空白修改间距


效果图

效果图如下所示: 

绘图代码

代码如下所示:

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()

相关文章

学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习...
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面...
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生...
Can’t connect to local MySQL server through socket \'/v...
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 ...
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服...