Создание подзаголовка Matplotlib с использованием цикла, который повторяет столбцы из разных фреймов данных Pandas

Итак, я пытаюсь исправить это со вчерашнего дня и не могу найти решение.

Я создал 12 фреймов данных pandas (с именами exp_1 — exp_12) для данных 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()

Вот как выглядит мой сюжет, если я не использую цикл, а просто пишу все вручную: введите здесь описание изображения

Кто-нибудь знает, как я могу это решить? Буду рад любым предложениям, так что заранее спасибо


person Gabriela Catalina    schedule 04.10.2017    source источник
comment
Где ваши данные?   -  person cs95    schedule 04.10.2017
comment
Я сохранил все данные в фреймах данных (exp_1-exp_12) на предыдущем шаге. Вы хотите, чтобы я разместил это здесь? Данных много, поэтому я их не упомянул.   -  person Gabriela Catalina    schedule 05.10.2017


Ответы (1)


Просто сохраните свои фреймы данных в списке, а не в словаре имен фреймов данных, а затем выполните итерацию для создания подграфиков. Даже используйте 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()
person Parfait    schedule 05.10.2017