前言
前面几篇文章,我们有讲解关于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~ 三种子图的效果都以讲解完毕,下次再做其他总结。。。