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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340