Как сказал Томас Кюн, вы должны переместиться на tight_layout()
после выполнения графиков, например:
fig = plt.figure(figsize=(16, 15))
i = 0
for c in top_countries:
c_df = wines_df[wines_df.country == c]
i +=1
ax1 = fig.add_subplot(5,2,i)
i +=1
ax2 = fig.add_subplot(5,2,i)
sns.kdeplot(c_df['points'], ax=ax1)
ax1.set_title("POINTS OF ALL WINES IN %s, n=%d" % (c.upper(), c_df.shape[0]), fontsize=16)
sns.boxplot(c_df['price'], ax=ax2)
ax2.set_title("PRICE OF ALL WINES IN %s, n=%d" % (c.upper(), c_df.shape[0]), fontsize=16)
fig.tight_layout()
plt.show()
Если оно все еще перекрывается (это может случаться в некоторых редких случаях), вы можете указатьзаполнение с помощью:
fig.tight_layout(pad=0., w_pad=0.3, h_pad=1.0)
Где pad
- общее заполнение, w_pad
- горизонтальное заполнение и h_pad
- вертикальное заполнение.Просто попробуйте некоторые значения, пока ваш сюжет не выглядит красиво.(pad=0., w_pad=.3, h_pad=.3)
- хорошее начало, если вы хотите, чтобы ваши графики были как можно более узкими.
Другая возможность - указать constrained_layout=True
на рисунке:
fig = plt.figure(figsize=(16, 15), constrained_layout=True)
Теперь вы можетеудалите строку fig.tight_layout()
.
edit:
Еще одна вещь, на которую я наткнулся:
Кажется, вы указываете свой figsize
, чтобы онпомещается на стандартную бумагу DIN A4 в сантиметрах (типичная ширина текста: 16 см).Но figsize
в matplotlib в дюймах .Так что, вероятно, лучше заменить figsize на figsize=(16/2.54, 15/2.54)
.
Я знаю, что совершенно сбивает с толку, что matplotlib внутренне использует дюймы в качестве единиц, учитывая, что в основном это научное сообщество и инженеры данных, работающие с matplotlib (иони обычно используют единицы СИ).Как указано в ImportanceOfBeingErnest, в настоящее время ведется несколько дискуссий о том, как реализовать другие единицы, кроме дюймов.