matplotlib图形整合之多个子图一起绘制

举报
王小王-123 发表于 2022/04/12 22:52:30 2022/04/12
【摘要】 目录 简单了解多子图 使用plt.subplot(mnx) 分别绘制 使用plt.subplots(m,n)一次性绘制 高级进阶  总结 每文一语 简单了解多子图 学习matplotlib的时候,有人肯定会觉得为啥不用Excel,为啥不用origin,为啥不直接使用软件,其实matplotlib绘图之所以在p...

目录

简单了解多子图

使用plt.subplot(mnx) 分别绘制

使用plt.subplots(m,n)一次性绘制

高级进阶

 总结

每文一语


简单了解多子图

学习matplotlib的时候,有人肯定会觉得为啥不用Excel,为啥不用origin,为啥不直接使用软件,其实matplotlib绘图之所以在python领域经久不衰,是有它的独特之处的,我认为这其中的一个亮点就是,matplotlib绘制多个子图的时候,我们可以根据自己的想法去排列子图的顺序,也可以生成不同的子图数量,类似于前端web可视化大屏,有着较好的用户体验感!

使用plt.subplot(mnx) 分别绘制


  
  1. # -*- coding: utf-8 -*-
  2. import matplotlib as mpl
  3. import matplotlib.pyplot as plt
  4. t=np.arange(0.0,2.0,0.1)
  5. s=np.sin(t*np.pi)
  6. plt.subplot(2,2,1) #要生成两行两列,这是第一个图
  7. plt.plot(t,s,'b*')
  8. plt.ylabel('y1')
  9. plt.subplot(2,2,2) #两行两列,这是第二个图
  10. plt.plot(2*t,s,'r--')
  11. plt.ylabel('y2')
  12. plt.subplot(2,2,3)#两行两列,这是第三个图
  13. plt.plot(3*t,s,'m--')
  14. plt.ylabel('y3')
  15. plt.subplot(2,2,4)#两行两列,这是第四个图
  16. plt.plot(4*t,s,'k*')
  17. plt.ylabel('y4')
  18. plt.show()

 

使用plt.subplot()方法,生成子图,规则总结如下:

第一个数字是行,第二个数字是列,第三个数字是个数(图形所处顺序的序号)

例如:224就是生成两行两列的子图,本图形是第四个,那么就是第二行第二列的图形

那么有时候,有些人觉得这样太麻烦了,每次生成都要在绘图程序前面加一行这样的代码,为什么不可以一次性生成我需要的画布呢?答案是可以的!

使用plt.subplots(m,n),可以一次性生成m行n列的字图

注意前面需要figure和ax进行接收

调用就和我们数组一样!

使用plt.subplots(m,n)一次性绘制


  
  1. # -*- coding: utf-8 -*-
  2. import matplotlib as mpl
  3. import matplotlib.pyplot as plt
  4. t=np.arange(0.0,2.0,0.1)
  5. s=np.sin(t*np.pi)
  6. c=np.cos(t*np.pi)
  7. figure,ax=plt.subplots(2,2) # 多行subplots得到的ax数组是二维的
  8. ax[0][0].plot(t,s,'r*')
  9. ax[0][1].plot(t*2,s,'b--')
  10. ax[1][0].plot(t,c,'g*')
  11. ax[1][1].plot(t*2,c,'y--')


  
  1. # -*- coding: utf-8 -*-
  2. import matplotlib as mpl
  3. import matplotlib.pyplot as plt
  4. import numpy as np
  5. t=np.arange(0.0,2.0,0.1)
  6. s=np.sin(t*np.pi)
  7. c=np.cos(t*np.pi)
  8. figure,ax=plt.subplots(1,2,figsize=(6,2),dpi=120) # 一行subplots得到的ax数组是一维的
  9. ax[0].plot(t,s,'r*')
  10. ax[1].plot(t*2,s,'b--')

  
  1. plt.subplots(nrows=1,ncols=3,figsize=(5,5))
  2. #plt.subplots(nrows=1,ncols=3)
  3. # 返回一个figure对象,和一个axesSubplot子图对象的数组
  4. # 行或者列等于1,返回一个一维数组

加一个plt.tight_layout()会使得图形更加紧凑


  
  1. plt.tight_layout()
  2. plt.subplots(nrows=2,ncols=3, figsize=(12,8)) # 如果行列都不为1,那么返回一个2维数组


  
  1. plt.subplots(nrows=3,ncols=4) # 如果行和列都大于1,返回1个Figure对象,和1个包含3*4=12个子图对象的矩阵(2维数组)
  2. # 341 342 343 344
  3. # 345 346 347 348
  4. # 349 3,4,10 3,4,11 3,4,12

 

高级进阶


  
  1. plt.subplot(121)
  2. plt.subplot(222)
  3. plt.subplot(224)

看到上面你会想到什么?会生成怎样的画布呢?

下面我就给大家详细的解释一下,为啥会出现这样的画布,首先我的需求是在左边出现一个子图,比较长的,最好是右边两个子图的长度和,那么应该怎么做呢?遇到这样的情况我们仍然需要把这一个平面分成均等分,那么也就是四个。

当我们画一个左边的图的时候,我们应该把画布想象为一行两列的画布,第一个自然也就是121

当我们画右边的图形的时候,我们应该把画布想象为两行两列的画布,右边第一个自然就是222,第二个自然就是224。

下面我们可以多看几个,来验证我们得推论


  
  1. plt.subplot(221)
  2. plt.subplot(223)
  3. plt.subplot(122)


  
  1. plt.subplot(211)
  2. plt.subplot(223)
  3. plt.subplot(224)


  
  1. plt.subplot(221)
  2. plt.subplot(222)
  3. plt.subplot(212)

 


  
  1. plt.figure(figsize=(12,5))
  2. plt.subplot(231)
  3. plt.subplot(233)
  4. plt.subplot(234)
  5. plt.subplot(236)
  6. plt.subplot(132)

 


  
  1. plt.figure(figsize=(16,5))
  2. plt.subplot(262)
  3. plt.subplot(265)
  4. plt.subplot(268)
  5. plt.subplot(2,6,11)
  6. plt.subplot(132)

注意这个间隙是自动产生的,如果需要将间隙变的更大,那么就可以取最左边的值和最右边的值


  
  1. plt.figure(figsize=(16,5))
  2. plt.subplot(241)
  3. plt.subplot(244)
  4. plt.subplot(245)
  5. plt.subplot(2,4,8)
  6. plt.subplot(132)

 总结

在生成上面案例的时候,我们需要利用Excel进行编排,不然很容易出错的!

每文一语

没有一蹴而就的成功!

文章来源: wxw-123.blog.csdn.net,作者:王小王-123,版权归原作者所有,如需转载,请联系作者。

原文链接:wxw-123.blog.csdn.net/article/details/124062039

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。