matplotlib图形整合之多个子图绘制的实例代码

作者:王小王-123 时间:2023-10-23 23:17:47 

简单了解多子图

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

matplotlib图形整合之多个子图绘制的实例代码

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

# -*- coding: utf-8 -*-

import matplotlib as mpl
import matplotlib.pyplot as plt

t=np.arange(0.0,2.0,0.1)
s=np.sin(t*np.pi)
plt.subplot(2,2,1) #要生成两行两列,这是第一个图
plt.plot(t,s,'b*')
plt.ylabel('y1')
plt.subplot(2,2,2) #两行两列,这是第二个图
plt.plot(2*t,s,'r--')
plt.ylabel('y2')
plt.subplot(2,2,3)#两行两列,这是第三个图
plt.plot(3*t,s,'m--')
plt.ylabel('y3')
plt.subplot(2,2,4)#两行两列,这是第四个图
plt.plot(4*t,s,'k*')
plt.ylabel('y4')
plt.show()

matplotlib图形整合之多个子图绘制的实例代码

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

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

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

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

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

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

调用就和我们数组一样!

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

# -*- coding: utf-8 -*-
import matplotlib as mpl
import matplotlib.pyplot as plt

t=np.arange(0.0,2.0,0.1)
s=np.sin(t*np.pi)
c=np.cos(t*np.pi)
figure,ax=plt.subplots(2,2) # 多行subplots得到的ax数组是二维的
ax[0][0].plot(t,s,'r*')
ax[0][1].plot(t*2,s,'b--')
ax[1][0].plot(t,c,'g*')
ax[1][1].plot(t*2,c,'y--')

matplotlib图形整合之多个子图绘制的实例代码

# -*- coding: utf-8 -*-
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np

t=np.arange(0.0,2.0,0.1)
s=np.sin(t*np.pi)
c=np.cos(t*np.pi)
figure,ax=plt.subplots(1,2,figsize=(6,2),dpi=120)  # 一行subplots得到的ax数组是一维的
ax[0].plot(t,s,'r*')
ax[1].plot(t*2,s,'b--')
plt.subplots(nrows=1,ncols=3,figsize=(5,5))
#plt.subplots(nrows=1,ncols=3)
# 返回一个figure对象,和一个axesSubplot子图对象的数组
# 行或者列等于1,返回一个一维数组

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

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

matplotlib图形整合之多个子图绘制的实例代码

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

matplotlib图形整合之多个子图绘制的实例代码

高级进阶

plt.subplot(121)
plt.subplot(222)
plt.subplot(224)

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

matplotlib图形整合之多个子图绘制的实例代码

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

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

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

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

plt.subplot(221)
plt.subplot(223)
plt.subplot(122)

matplotlib图形整合之多个子图绘制的实例代码

plt.subplot(211)
plt.subplot(223)
plt.subplot(224)

matplotlib图形整合之多个子图绘制的实例代码

plt.subplot(221)
plt.subplot(222)
plt.subplot(212)

matplotlib图形整合之多个子图绘制的实例代码

plt.figure(figsize=(12,5))
plt.subplot(231)
plt.subplot(233)
plt.subplot(234)
plt.subplot(236)
plt.subplot(132)

matplotlib图形整合之多个子图绘制的实例代码

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

matplotlib图形整合之多个子图绘制的实例代码

matplotlib图形整合之多个子图绘制的实例代码

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

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

matplotlib图形整合之多个子图绘制的实例代码

 总结

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

来源:https://wxw-123.blog.csdn.net/article/details/124062039

标签:matplotlib,子图
0
投稿

猜你喜欢

  • Python Pandas教程之series 上的转换操作

    2023-08-16 22:20:50
  • 开心网让人很不开心

    2009-04-05 15:56:00
  • python+PyQT实现系统桌面时钟

    2023-07-21 07:46:33
  • python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例

    2022-10-12 11:37:27
  • TensorFlow 合并/连接数组的方法

    2021-08-19 16:28:35
  • Vue3新属性之css中使用v-bind的方法(v-bind in css)

    2024-05-28 16:01:07
  • Python算法之求n个节点不同二叉树个数

    2022-08-22 03:59:30
  • pandas is in和not in的使用说明

    2023-04-04 22:06:11
  • 如何用python实现结构体数组

    2023-10-13 19:07:34
  • 一条sql 语句搞定数据库分页

    2009-03-21 18:32:00
  • Python中变量交换的例子

    2021-04-02 13:28:36
  • MySQL的命令行提示符及其表达的意思

    2008-03-17 13:34:00
  • 定义列表: DL DT DD

    2009-05-06 13:08:00
  • IOS中safari下的select下拉菜单文字过长不换行的解决方法

    2024-04-25 13:07:58
  • PYcharm 激活方法(推荐)

    2022-07-27 01:51:21
  • CSS分栏布局的方法:绝对定位和浮动

    2009-04-30 13:10:00
  • Golang 使用map需要注意的几个点

    2024-04-30 10:06:19
  • Python Django view 两种return的实现方式

    2022-05-03 16:07:04
  • Response.Flush的使用心得

    2010-04-08 12:57:00
  • python计算最小优先级队列代码分享

    2022-12-05 03:26:50
  • asp之家 网络编程 m.aspxhome.com