文章目录

  • 省时版本解决方法
  • 遇到的问题
  • 解决方法
  • 参考

省时版本解决方法

请使用matplotlib.gridspec

import matplotlib
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
import matplotlib.gridspec as gridspec
import matplotlib.pyplot as plt
gs = gridspec.GridSpec(2, 6) # 创立2 * 6 网格
gs.update(wspace=0.8)
# 对第一行进行绘制
ax1 = plt.subplot(gs[0, :2]) # gs(哪一行,绘制网格列的范围)
ax2 = plt.subplot(gs[0, 2:4])
ax3 = plt.subplot(gs[0, 4:6])
# 对第二行进行绘制
ax4 = plt.subplot(gs[1, 1:3])
ax5 = plt.subplot(gs[1, 3:5])
plt.show()

绘制5幅图,以2行绘制,首行3幅图,次行2幅图居中:

遇到的问题

在研读《数字图像处理与python实现》一书,做实验时需要绘制如下图所示的5幅图,自己的印象中subplot绘图只能上下对齐,所以下图的绘制遇到问题。

来源:岳亚伟《数字图像处理与python实现》

解决方法

根据参考1,习得了绘制3幅图,以2行绘制,单幅图像居中的方法。

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
gs = gridspec.GridSpec(2, 4)
gs.update(wspace=0.5)
ax1 = plt.subplot(gs[0, :2], )
ax2 = plt.subplot(gs[0, 2:])
ax3 = plt.subplot(gs[1, 1:3])
plt.show()

引用:您可以使用gridspec.Gridspec()。这里的技巧是创建一个规则的网格,但不是在每个单元格中都有一个绘图。例如,在本例中,我创建了一个2x4单元格网格。每个绘图跨越2个单元格。所以在第一行,我有两个图(2x2个单元格)在第二行,我有一个空单元格,一个绘图(1x2个单元格)和另一个空单元格。
源:见参考1

绘制3幅图,以2行绘制,单幅图像居中实验结果:

然后去官方文档(详见参考2)巡视了一圈,然后尝试变成绘制5幅图,以2行绘制,首行3幅图,次行2幅图居中

import matplotlib.gridspec as gridspec
import matplotlib.pyplot as plt
gs = gridspec.GridSpec(2, 6)
gs.update(wspace=0.8)
ax1 = plt.subplot(gs[0, :2])
ax2 = plt.subplot(gs[0, 2:4])
ax3 = plt.subplot(gs[0, 4:6])
ax4 = plt.subplot(gs[1, 1:3])
ax5 = plt.subplot(gs[1, 3:5])
plt.show()

绘制5幅图,以2行绘制,首行3幅图,次行2幅图居中实验结果:

绘制结果

实验代码

from scipy import ndimage
from skimage import data, util
from matplotlib import pyplot as plt
import matplotlib.gridspec as gridspecimg = data.astronaut()[:, :, 0]
# 对图像加入胡椒噪声
pepper_img = util.random_noise(img, mode='pepper', seed=None, clip=True)
# 对图像加入盐粒噪声
salt_img = util.random_noise(img, mode='salt', seed=None, clip=True)
n = 3
# 最大值滤波
max_img = ndimage.maximum_filter(pepper_img, (n, n))
# 最小值滤波
min_img = ndimage.minimum_filter(salt_img, (n, n))
# 显示图像
plt.rcParams['font.sans-serif'] = ['SimHei'] # 中文
gs = gridspec.GridSpec(2, 6)
gs.update(wspace=0.8)ax1 = plt.subplot(gs[0, :2])
ax1.imshow(img,cmap='gray')
ax1.set_title("宇航员原图")ax2 = plt.subplot(gs[0, 2:4])
ax2.imshow(pepper_img,cmap='gray')
ax2.set_title("加胡椒噪声图像")ax3 = plt.subplot(gs[0, 4:6])
ax3.imshow(salt_img,cmap='gray')
ax3.set_title("加盐粒噪声图像")ax4 = plt.subplot(gs[1, 1:3])
ax4.imshow(max_img,cmap='gray')
ax4.set_title("最大值滤波结果")ax5 = plt.subplot(gs[1, 3:5])
ax5.imshow(min_img,cmap='gray')
ax5.set_title("最小值滤波结果")plt.show()

参考

[1]python - Matplotlib:3幅图以2行绘制,单幅图像居中
[2]官方文档:Customizing Figure Layouts Using GridSpec and Other Functions

python绘图subplot绘制5幅图:以2行绘制,首行3幅图,次行2幅图居中(内含绘制3幅图简单版)相关推荐

  1. Python绘图神器Matplotlib、Echarts、Pyecharts 和 Plotly ——可绘制各种图

    Python绘图神器Matplotlib和Echarts Matplotlib官网 https://matplotlib.org/stable/tutorials/toolkits/mplot3d.h ...

  2. R绘图 vs Python绘图(散点图、折线图、直方图、条形图、箱线图、饼图、热力图、蜘蛛图)

    写在前面:为啥不用excel绘制这些图,用PoweBI,帆软BI等可视化软件来绘图,不是更方便吗?的确,这些工具都很方便,但同时,它们显得很呆,不够灵活,更为致命的是,它们绘制出的图形,分辨率不够,用 ...

  3. python 画蜘蛛_R绘图 vs Python绘图(散点图、折线图、直方图、条形图、箱线图、饼图、热力图、蜘蛛图)...

    写在前面:为啥不用excel绘制这些图,用PoweBI,帆软BI等可视化软件来绘图,不是更方便吗?的确,这些工具都很方便,但同时,它们显得很呆,不够灵活,更为致命的是,它们绘制出的图形,分辨率不够,用 ...

  4. Python绘图基础:认识绘图区 + subplot创建子图

    本小白在用 Python 绘制图形的时候发现可以利用多种代码来完成相同的图形的绘制,今天就给大家分享自己在利用 Python 绘图过程中总结的思路. 话不多说,直接开始 !!! 一.认识绘图区 在绘制 ...

  5. Python绘制高斯分布(正态分布)图像,附python绘图技巧

    高斯分布也称为正态分布,其概率密度函数如下: 使用Python绘制正态分布曲线,借助matplotlib绘图工具. 代码如下: # plot Gaussian Function # 注:正态分布也叫高 ...

  6. Python绘图之matplotlib基础教程:matplotlib库图表绘制中常规设置大全(交互模式、清除原有图像、设置横坐标显示文字/旋转角度、添加图例、绘图布局自动调整、图像显示、图像暂停)

    Python绘图之matplotlib基础教程:matplotlib库图表绘制中常规设置大全(交互模式.清除原有图像.设置横坐标显示文字/旋转角度.添加图例.绘图布局自动调整.图像显示.图像暂停) 目 ...

  7. python绘制四叶草_python绘图四叶草_Python教程,python,绘图

    Python阶乘求和的方法_Python教程 Python阶乘求和的方法:首先定义一个getSum函数,在函数内使用for循环调用fact函数:然后在fact函数内对一个数进行求阶乘运算,并将计算的结 ...

  8. 用python画小猪佩奇的编码_如何用python绘制小猪佩奇-python绘图教程图文讲解

    原标题:如何用python绘制小猪佩奇-python绘图教程图文讲解 如何运用python来绘制小猪佩奇呢?通过几道简单的python代码即可让你绘制出小猪佩奇,话不多说,直接上代码. 用python ...

  9. python绘图模块pandas_python绘图:matplotlib和pandas的应用

    在进行数据分析时,绘图是必不可少的模式探索方式.用Python进行数据分析时,matplotlib和pandas是最常用到的两个库. 1.matplotlib库的应用 准备工作如下:打开ipython ...

最新文章

  1. SQLServer之创建INSTEAD OF INSERT,UPDATE,DELETE触发器
  2. 暴雪停止与Kespa合作 星际联赛或被迫停赛
  3. maven项目转成web项目
  4. JavaScript实现levenshteinDistance字符串编辑距离算法(附完整源码)
  5. Visual Studio常用的快捷键整理
  6. 【SDOI2008】仪仗队
  7. 0基础怎么做可视化大屏?2种可以节省95%时间的方法教给你
  8. IO-03. 求整数均值
  9. cocos2d_x_05_Box2D物理引擎
  10. c语言程序设计环境软件下载,c语言编程软件
  11. 推挽电源的基本工作原理、磁通不平衡问题及其解决方法
  12. 电信套餐2020一览表_移动联通接连放大招,5G 套餐要降价?
  13. 苏宁API:item_get - 获得suning商品详情
  14. python有趣的案例_爬虫 (十九) 有趣的例子认识 while 循环 (十)|python爬虫|python入门|python教程...
  15. 软件测试-5-移动应用测试
  16. python3 正则匹配特殊符号_Python3 正则表达式特殊符号及用法(详细列表)
  17. 智能工厂 | 工业4.0
  18. 【附源码】计算机毕业设计SSM芮城县十全十美火锅店点餐系统
  19. 通过梦幻般的幻想超级捆绑包实现您的命运
  20. 2023年苹果pro A2799b笔记本忘记登录密码如何重置开机密码?

热门文章

  1. c#中Class和Struct使用与性能的区别
  2. 富文本HTML编辑器UEditor
  3. 从tabBarController的一个item上的控制器跳转到另一个item上的控制器
  4. kafka log4j配置
  5. 面试题_89_to_92_单元测试 JUnit 面试题
  6. ubuntu phpstorm 安装xdebuger
  7. linux ip addr peer,Linux网络IP设置
  8. STM32 基础系列教程 5 – 系统定时器
  9. STM32 SPI NSS 引脚为不能拉高问题
  10. 嵌入式新人发展的总体方向