在python中绘制多个图形

时间:2019-01-26 21:54:38

标签: python matplotlib subplot

也许标题有误导性,否则有人会告诉我重复。但是,经过许多(许多)小时的浏览,我什么都没找到。我想绘制多个散点图,然后将它们合并为一些nrow和ncols的子图?

假设我们具有以下条件:

new_list=[]

for j in list(set(lala)):

df1 = df[df['Date'] == j]
df1.drop('Date', axis = 1, inplace = True)

df2 = df1.groupby('Z').mean()
df2.reset_index(inplace = True)

new_list.append(df2)

for j in range(0, len(new_list)):
plt.figure(figsize=(6, 6), dpi=80)
plt.scatter(new_list[j]['X'],new_list[j]['Y'])

让我解释一下它的作用;我创建了一个名为 new_list 的列表,该列表包含在for循环中构造的数据帧(由于需要全局方法,因此您可以忽略该构造)。之后,我为 new_list 中的每个数据框打印散点图(总数与 new_list 的元素数量一样多)。

因为打印输出的数量很多,所以我想在这些打印输出上创建子图,以使最终图像对眼睛更容易。

那么我该如何获取所有这些散点图,并将它们合并为一些nrow和ncols的子图?

1 个答案:

答案 0 :(得分:1)

假设您有4行和10列,则可以执行类似的操作(只是其中一种方法)。在这里flatten会向您返回40个轴对象(4 x 10)的列表,该对象在整个行中的顺序是:第一行先四列,然后第二行四列,依此类推。

fig, axes = plt.subplots(nrows=4, ncols=10)

for i, ax in enumerate(axes.flatten()):
    ax.scatter(new_list[i]['X'],new_list[i]['Y'])

如果您不想使用enumerate,也可以使用以下

fig, axes = plt.subplots(nrows=4, ncols=10)
ax = axes.flatten()

for j in range(0, len(new_list)):
    ax[j].scatter(new_list[j]['X'],new_list[j]['Y'])
相关问题