2017-10-04 51 views
0

好的,所以我一直試圖從昨天開始解決這個問題,並且找不到解決方案。使用迭代來自不同熊貓數據幀的列的循環創建Matplotlib子圖

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

這就是我什麼我的情節看起來像如果我不使用循環,而只是用手工寫了整個事情: enter image description here

有誰有一個想法,我可以解決這個問題?我會很樂意提供任何建議,所以在此先感謝

+0

您的數據在哪裏? –

+0

我在上一步中將所有數據保存到數據框(exp_1-exp_12)中。你想讓我把它發佈在這裏嗎?這是很多數據,這就是爲什麼我把它排除在外 –

回答

0

只需將數據框保存在列表中而不是數據框名稱字典中,然後迭代創建子圖。即使用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() 
+0

這工作!非常感謝 :) –