如何使用python的matplotlib绘制多子图的图片?首先我们来看看最终的结果:
操作步骤有如下几步:
第一步:导入包。 这里需要使用到三个模块matplotlib、numpy、pandas
,导入这三个包的代码如下:
import matplotlib.pyplot as plt #是画图的核心
import numpy as np #使用到其中数组相关的模块
import pandas as pd #使用到其中序列化对象
注意:如果这里缺少相关模块,笔者这里缺少pandas
这个模块,如果有软件提示,按照软件提示安装相应的模块,如果没有提示,直接打开cmd
窗口,使用pip3 install xxxxx
安装相应的模块,xxxxx代表对应的模块名称,比如我这里安装的代码是pip3 install pandas
。
安装完对应的模块,我们继续到画多个子图中来。
第二步,设置行数和列数。首先,我们要设置展示的子图行数和列数,比如我们要展示两行两列的子图,示例代码如下:
fig, axes = plt.subplots(nrows=2, ncols=2) #设置展示的图的行数,列数量,这里是2*2的图
第三步,接下来,我们就要准备数据
data1 = pd.Series(np.random.rand(6), index=list("123456")) #这里创建一组数据,用来展示到指定的图上
生成的data1数据的具体情况如下:
1 0.079807
2 0.407609
3 0.414676
4 0.771615
5 0.096824
6 0.009974
看到这里是不是有点懵,笔者准备了一组对照的数据帮助理解
data2 = pd.Series([0, 1, 2, 8], index=list(['first', 'sec', 'thir', 'fourth'])) #这里创建一组数据,用来展示到指定的图上
data3 = pd.Series([0, 1, 2, 8], index=list(['first', 'sec', 'thir', 'fourth'])) #这里创建一组数据,用来展示到指定的图上
生成的data2的数量如下:
first 0
sec 1
thir 2
fourth 8
仔细对照上面两种数据情况,简单理解下pd.Series(y,x)
这个函数,前面的[0, 1, 2, 8]、np.random.rand(6)
表示两个图中每个x轴的值对应的取值,而index=list(['first', 'sec', 'thir', 'fourth'])
则就是我们x轴的每个刻度。
第四步:绘制图像。好了,x轴和y轴数据准备好后,我们就将这几个数据绘制到我们想要展示的位置中去。绘制代码如下:
data1.plot.bar(ax=axes[0, 0], color='b', alpha=0.5) #在0,0位置上画图,颜色为蓝色
data2.plot.bar(ax=axes[0, 1], color='g', alpha=0.5) #在0,1位置上画图,颜色为绿色
data3.plot.bar(ax=axes[1, 0], color='g', alpha=0.5) #在1,0位置上画图,颜色为绿色
其中ax=axes[0, 0]
表示在两行两列的坐标轴上的[0,0]
位置绘制我们第一个数据(data1)的图,color='b'
表示绘制蓝色的图。笔者这里没有绘制[1,1]
的图,要想绘制,自己补充就行。
第五步:接下来就是展示你绘制图的代码:
plt.show() #必须要有,不然不展示图片
结果如下图:
注意: 但是,我们发现一个问题,第一行x轴有部分类容展示不出来,如下图标识部分:
那么我们需要调整一下距离,代码如下:
plt.tight_layout() #调整子图间的距离
最后的代码如下:
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
fig, axes = plt.subplots(nrows=2, ncols=2) #设置展示的图的行数,列数量,这里是2*2的图
data1 = pd.Series(np.random.rand(6), index=list("123456")) #这里创建一组数据,用来展示到指定的图上
data2 = pd.Series([0, 1, 2, 8], index=list(['first', 'sec', 'thir', 'fourth'])) #这里创建一组数据,用来展示到指定的图上
data3 = pd.Series([0, 1, 2, 8], index=list(['first', 'sec', 'thir', 'fourth'])) #这里创建一组数据,用来展示到指定的图上
print(data1)
print(data2)
data1.plot.bar(ax=axes[0, 0], color='b', alpha=0.5) #在0,0位置上画图,颜色为蓝色
data2.plot.bar(ax=axes[0, 1], color='g', alpha=0.5) #在0,1位置上画图,颜色为绿色
data3.plot.bar(ax=axes[1, 0], color='g', alpha=0.5) #在1,0位置上画图,颜色为绿色
plt.tight_layout() #调整子图间的距离
plt.show()
结果图如是:
注意:欢迎转载,转载时请注明来源