matplotlib - 创建子图

前言

前面几篇文章,我们有讲解关于matplotlib的用法,今天我们补充一个关于matplotlib创建子图的集中方法

我们在使用图形可视化工具时,有可能需要一个窗口里面创建数个小的子图来满足我们不同的需求,今天我们就来数一下,创建子图的三种方法!

矩阵式布局

矩阵式布局很简单,就是将一个窗口等分的划成相等的几个区域,规定行、列数即可
矩阵式布局
例如这样的
那么我们代码应该如何实现呢?
首先,我们来说语法:plt.subplot(行数,列数,序号)

#导入模块
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import font_manager

#设置中文字体
my_font = font_manager.FontProperties(fname="C:\Windows\Fonts\msyh.ttc")

#创建图形窗口,设置图形窗口名字
plt.figure('Subplot',facecolor='lightgray')

#设置两行两列序号为1的矩阵子图
plt.subplot(221)
plt.xticks(())
plt.yticks(())
plt.text(0.5,0.5,'你好',ha='center',va='center',size=56,alpha=0.5,Fontproperties=my_font)

#设置两行两列序号为2的矩阵子图
plt.subplot(222)
plt.xticks(())
plt.yticks(())
plt.text(0.5,0.5,'中国',ha='center',va='center',size=56,alpha=0.5,Fontproperties=my_font)

#设置两行两列序号为3的矩阵子图
plt.subplot(223)
plt.xticks(())
plt.yticks(())
plt.text(0.5,0.5,'你好',ha='center',va='center',size=56,alpha=0.5,Fontproperties=my_font)

#设置两行两列序号为4的矩阵子图
plt.subplot(224)
plt.xticks(())
plt.yticks(())
plt.text(0.5,0.5,'世界',ha='center',va='center',size=56,alpha=0.5,Fontproperties=my_font)

#设置紧凑式布局
plt.tight_layout()

plt.savefig("路径")

效果图:
矩阵式子图
提示

plt.subplot(3,3,5)
plt.subplot(335)

这两种写法的效果相等!

网格式布局

网格式布局的话,可以让我们灵活的进行排版,相对来说,更方便我们进行展示。
但是,我们需要用到另一种方法,需要重新导入
from matplotlib import gridspec as mg
语法:

gs = mg.GridSpec(行数,列数)
plt.subplot(gs[占行,占列])

现在明白了他的基本语法之后,我们来实际操作一下。

需求:
需求图
分析:
我们的代码mg.GridSpec(行数,列数)其实就是已经将图形窗口划分为相等的几行几列,但是,他是不可见的,也就是说,我们一会儿分配位置的时候,还是根据的行、列来进行划分的。
分析图
大致上就是上图那样。

  • 网格1:[0,:2] (行、列索引下标)
  • 网格2:[1:,0]
  • 网格3:[2,1:]
  • 网格4:[:2,2]
  • 网格5:[1,1]
    代码:
#导入模块
from matplotlib import pyplot as plt
from matplotlib import gridspec as mg

#创建图形窗口
plt.figure("Grid",facecolor="lightgray")

#设置行列数
gs = mg.GridSpec(3,3)

#创建网格1
plt.subplot(gs[0,:2])
plt.xticks(())
plt.yticks(())
plt.text(0.5,0.5,"1",ha="center",va="center",size=36,alpha=0.5)

#创建网格2
plt.subplot(gs[1:,0])
plt.xticks(())
plt.yticks(())
plt.text(0.5,0.5,"2",ha="center",va="center",size=36,alpha=0.5)

#创建网格3
plt.subplot(gs[2,1:])
plt.xticks(())
plt.yticks(())
plt.text(0.5,0.5,"3",ha="center",va="center",size=36,alpha=0.5)

#创建网格4
plt.subplot(gs[:2,2])
plt.xticks(())
plt.yticks(())
plt.text(0.5,0.5,"4",ha="center",va="center",size=36,alpha=0.5)

#创建网格5
plt.subplot(gs[1,1])
plt.xticks(())
plt.yticks(())
plt.text(0.5,0.5,"5",ha="center",va="center",size=36,alpha=0.5)

#紧凑布局
plt.tight_layout()

#保存
plt.savefig("路径")

效果图
网格是布局效果图

自由式布局

自由式布局主要应用于,当某个场景需要一个大图里面欠小图,例如
示例图
自由式布局就不再需要import导入其他的了,但是需要用到axes方法

语法:plt.axes([左坐标,底坐标,宽,高])

这里我们会提过一个左坐标,一个底坐标,一个宽一个高。
可以理解为:
分析
注意:这里设置的左坐标和底坐标,宽、高,不是写死的具体坐标轴的信息,而是相对于坐标轴的比例

从而通过这四个比例来达到自由式布局的效果

代码

from matplotlib import pyplot as plt
plt.figure("Axes",facecolor='lightgray',)

plt.axes([0.03,0.038,0.94,0.924])
plt.xticks(())
plt.yticks(())
plt.text(0.5,0.5,'1',ha="center",va="center",size=36,alpha=0.5,color="red")

plt.axes([0.63,0.076,0.31,0.308])

plt.xticks(())
plt.yticks(())

plt.text(0.5,0.5,'2',ha="center",va="center",size=36,alpha=0.5,color="orange")

plt.savefig("路径")

效果图
自由式布局
ok~ 三种子图的效果都以讲解完毕,下次再做其他总结。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值