簡體   English   中英

使用一個循環來創建Matplotlib子圖,該循環迭代來自不同Pandas數據框的列

[英]Creating Matplotlib subplot using a loop that iterates columns from different Pandas Dataframes

好的,所以自昨天以來我一直在嘗試解決此問題,但找不到解決方案。

我為12個不同實驗的數據創建了12個熊貓數據框(命名為exp_1-exp_12),列名稱在所有數據框中均相同。 我想創建一個包含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()

但是我試圖通過使用循環來創建這些子圖,從而不必為每個數據框手動輸入每個樣本名稱。 現在,這就是我所擁有的:

 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()

如果不使用循環,這就是我的情節的樣子,而只是手工編寫整個內容: 在此處輸入圖片描述

有人知道我該如何解決嗎? 我會為任何建議感到高興,所以在此先感謝

只需將數據框保存在列表中,而不是數據框名稱的字典中,然后進行迭代以創建子圖。 甚至使用enumerate來獲取繪圖位置的循環計數。

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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM