Реплицируйте R-фигуру в Matplotlib - добавьте xlabel через субплоты - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть задача скопировать фигуру, созданную в R на python, с другим набором данных. К сожалению, у нас нет кода R, который изначально использовался для создания рисунка, но у меня есть хорошее примерное соответствие ниже. Я пытаюсь ответить на следующее:

  1. Как я могу добавить метки 'DV' и 'CS' и соответствующие им линии на график, чтобы они охватывали субплоты?
  2. Как я могу добавить yticks на самом левом графике, а не на остальных?
  3. Как я могу добавить ярлык "День жизни" вне всех графиков?

Вот старая цифра:

old Image

Вот тот, который я создал с другими данными:

New Image

Вот код, который я использовал для его создания:

fig, (ax1, ax2, ax3, ax4) = plt.subplots(1, 4, figsize=(8,5), sharey=True)

sns.barplot(data=mean_df[mean_df['DV/CS']=='vag'][mean_df['CON/EVC']=='con'], x='Day',y='day',
           ax=ax1, capsize=.1, palette=['#C4C4C4','#C4C4C4'], edgecolor='#6C6C6C', linewidth='3',
           errcolor='#6C6C6C')
ax1.set_ylabel('Mean weighted UniFrac distance', size=15)

sns.barplot(data=mean_df[mean_df['DV/CS']=='vag'][mean_df['CON/EVC']=='imp'], x='Day',y='day',
           ax=ax2, capsize=.1, palette=['#C1DBD8','#C1DBD8'], edgecolor='#439A89', linewidth='3',
           errcolor='#439A89')

sns.barplot(data=mean_df[mean_df['DV/CS']=='csec'][mean_df['CON/EVC']=='con'], x='Day',y='day',
           ax=ax3, capsize=.1, palette=['#C4C4C4','#C4C4C4'], edgecolor='#6C6C6C', linewidth='3',
           errcolor='#6C6C6C')

sns.barplot(data=mean_df[mean_df['DV/CS']=='csec'][mean_df['CON/EVC']=='imp'], x='Day',y='day',
           ax=ax4, capsize=.1, palette=['#C1DBD8','#C1DBD8'], edgecolor='#439A89', linewidth='3',
           errcolor='#439A89')

for ax in [ax1, ax2, ax3, ax4]:
    ax.set_xticklabels(ax.get_xticklabels(), size=15)
    ax.set_xlabel('')
    ax.spines['right'].set_visible(False)
    ax.spines['top'].set_visible(False)
    if ax!=ax1:
        ax.set_ylabel('')
        ax.spines['left'].set_visible(False)
        ax.set_yticks([])


plt.tight_layout()
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...