Python:matplotlib绘制多子图

很多时候,我们需要从多个角度对数据进行比较,在可视化上也是一样的。Matplotlib通过子图subplot的概念来实线这一功能。

一、手动创建子图

通过plt.axes函数可以创建基本子图,默认情况下它会创建一个标准的坐标轴,并填满整张图。但是我们可以通过参数配置,实现想要的子图效果。

这个参数是个列表形式,有四个值,从前往后,分别是子图左下角基点的x和y坐标以及子图的宽度和高度,数值的取值范围是0-1之间,画布左下角是(0,0),画布右上角是(1,1)。

下面我们看个例子:


上面是Matlab接口的风格,面向对象画图接口中有类似的fig.add_axes()方法:

二、 plt.subplot方法

subplot的方法接收三个整数参数,分别表示几行、几列、子图索引值。索引值从1开始,从左上角到右下角依次自增。


子图间距好像不太恰当,可以使用plt.subplots_adjust方法进行调整,它接受水平间距hspace和垂直间距wspace两个参数。

同样的,面向对象接口也有fig.add_subplot()方法可以使用:

三、 快速创建多子图

可以使用subplots()方法快速的创建多子图环境,并返回一个包含子图的Numpy数组。

fig, ax = plt.subplots(2,3,sharex='col', sharey='row')

通过sharex和sharey参数,自动地去掉了网格内部子图的坐标刻度等内容,实现共享,让图形看起来更整齐整洁。

通过对返回的ax数组进行调用,可以操作每个子图,绘制图形:

结果不再展示。但是需要注意的是,subplot()和subplots()两个方法在方法名上差个字母s外,subplots的索引是从0开始的。

四、GridSpec 复杂网格

前面的子图其实都比较规整,如果想实现不规则的多行多列子图,可以使用plt.GridSpec方法。


下面是一个使用plt.GridSpec方法创建多轴频次直方图的例子:

猜你喜欢

转载自blog.csdn.net/qq_40925239/article/details/88930342