使用迭代来自不同 Pandas 数据帧的列的循环创建 Matplotlib 子图
Creating Matplotlib subplot using a loop that iterates columns from different Pandas Dataframes
好的,所以我从昨天开始就一直在尝试解决这个问题,但找不到解决方案。
我为 12 个不同实验的数据创建了 12 个 pandas Dataframes(名为 exp_1 - exp_12),所有 Dataframes 中的列名都是相同的。我想为每个实验创建一个包含 12 个子图 (12x4) 的图,每行 4 个图。
到目前为止,还不错。绘图效果很好,我目前正在使用这段代码(我在这里将其缩短为 4 个图):
fig, axs = plt.subplots(nrows = 12, ncols=4, figsize = (15,27))
sns.regplot('MecA_SP', 'MecA_MP', data=exp_3, color ='blue', ax=axs[0,0])
sns.regplot('blaOXA_SP', 'blaOXA_MP', color ='lime', data=exp_3,
ax=axs[0,1])
sns.regplot('Aph3_SP', 'Aph3_MP', data=exp_3, color = 'deeppink',
ax=axs[0,2])
sns.boxplot(data=exp_3, orient ='h', color ='darkviolet', ax=axs[0,3])
fig.tight_layout()
plt.show()
但我正在尝试使用循环创建这些子图,这样我就不必为每个 Dataframe 手动输入每个样本名称。现在这就是我所拥有的:
fig, axs = plt.subplots(nrows = 12, ncols=4, figsize = (14,5))
exps = {0: 'exp_1',1: 'exp_2',2: 'exp_3',3: 'exp_4',4: 'exp_5',5: 'exp_6',
6:'exp_7',7: 'exp_8', 8:'exp_9',9: 'exp_10',10: 'exp_11',11: 'exp_12'}
for x in exps :
sns.regplot('MecA_SP', 'MecA_MP', data=x, color ='blue', ax=axs[exps[x],
0])
sns.regplot('blaOXA_SP', 'blaOXA_MP', color ='lime', data=x,
ax=axs[exps[x], 1])
sns.regplot('Aph3_SP', 'Aph3_MP', data=x, color = 'deeppink',
ax=axs[exps[x], 2])
sns.boxplot(data=x, orient ='h', color ='darkviolet', ax=axs[exps[x],3])
fig.tight_layout()
plt.show()
如果我不使用循环,这就是我的情节的样子,而只是手写整个事情:
enter image description here
有谁知道我该如何解决这个问题?我很乐意接受任何建议,在此先感谢
只需将您的数据框保存在一个列表中,而不是数据框名称的字典中,然后迭代以创建子图。甚至使用 enumerate
来获取图 ax 位置的循环计数。
exps = [exp_1, exp_2, exp_3, exp_4, exp_5, exp_6
exp_7, exp_8, exp_9, exp_10, exp_11, exp_12]
fig, axs = plt.subplots(nrows = 12, ncols=4, figsize = (14,5))
for i, x in enumerate(exps):
sns.regplot('MecA_SP', 'MecA_MP', data=x, color='blue', ax=axs[i, 0])
sns.regplot('blaOXA_SP', 'blaOXA_MP', data=x, color='lime', ax=axs[i, 1])
sns.regplot('Aph3_SP', 'Aph3_MP', data=x, color='deeppink', ax=axs[i, 2])
sns.boxplot(orient='h', data=x, color='darkviolet', ax=axs[i, 3])
fig.tight_layout()
plt.show()
plt.clf()
plt.close()
好的,所以我从昨天开始就一直在尝试解决这个问题,但找不到解决方案。
我为 12 个不同实验的数据创建了 12 个 pandas Dataframes(名为 exp_1 - exp_12),所有 Dataframes 中的列名都是相同的。我想为每个实验创建一个包含 12 个子图 (12x4) 的图,每行 4 个图。
到目前为止,还不错。绘图效果很好,我目前正在使用这段代码(我在这里将其缩短为 4 个图):
fig, axs = plt.subplots(nrows = 12, ncols=4, figsize = (15,27))
sns.regplot('MecA_SP', 'MecA_MP', data=exp_3, color ='blue', ax=axs[0,0])
sns.regplot('blaOXA_SP', 'blaOXA_MP', color ='lime', data=exp_3,
ax=axs[0,1])
sns.regplot('Aph3_SP', 'Aph3_MP', data=exp_3, color = 'deeppink',
ax=axs[0,2])
sns.boxplot(data=exp_3, orient ='h', color ='darkviolet', ax=axs[0,3])
fig.tight_layout()
plt.show()
但我正在尝试使用循环创建这些子图,这样我就不必为每个 Dataframe 手动输入每个样本名称。现在这就是我所拥有的:
fig, axs = plt.subplots(nrows = 12, ncols=4, figsize = (14,5))
exps = {0: 'exp_1',1: 'exp_2',2: 'exp_3',3: 'exp_4',4: 'exp_5',5: 'exp_6',
6:'exp_7',7: 'exp_8', 8:'exp_9',9: 'exp_10',10: 'exp_11',11: 'exp_12'}
for x in exps :
sns.regplot('MecA_SP', 'MecA_MP', data=x, color ='blue', ax=axs[exps[x],
0])
sns.regplot('blaOXA_SP', 'blaOXA_MP', color ='lime', data=x,
ax=axs[exps[x], 1])
sns.regplot('Aph3_SP', 'Aph3_MP', data=x, color = 'deeppink',
ax=axs[exps[x], 2])
sns.boxplot(data=x, orient ='h', color ='darkviolet', ax=axs[exps[x],3])
fig.tight_layout()
plt.show()
如果我不使用循环,这就是我的情节的样子,而只是手写整个事情: enter image description here
有谁知道我该如何解决这个问题?我很乐意接受任何建议,在此先感谢
只需将您的数据框保存在一个列表中,而不是数据框名称的字典中,然后迭代以创建子图。甚至使用 enumerate
来获取图 ax 位置的循环计数。
exps = [exp_1, exp_2, exp_3, exp_4, exp_5, exp_6
exp_7, exp_8, exp_9, exp_10, exp_11, exp_12]
fig, axs = plt.subplots(nrows = 12, ncols=4, figsize = (14,5))
for i, x in enumerate(exps):
sns.regplot('MecA_SP', 'MecA_MP', data=x, color='blue', ax=axs[i, 0])
sns.regplot('blaOXA_SP', 'blaOXA_MP', data=x, color='lime', ax=axs[i, 1])
sns.regplot('Aph3_SP', 'Aph3_MP', data=x, color='deeppink', ax=axs[i, 2])
sns.boxplot(orient='h', data=x, color='darkviolet', ax=axs[i, 3])
fig.tight_layout()
plt.show()
plt.clf()
plt.close()