Как установить вращение x_ticks в сюжетах с помощью matplotilib? - PullRequest
0 голосов
/ 10 ноября 2019

Я использую вспомогательные участки matplotlib для создания двух участков рядом. Вот код, который я использую

fig, (ax0, ax1) = py.subplots(nrows=1,ncols=2, sharey=True, figsize=(16, 6))
fig.suptitle('Trips percentage per daira (for the top 10 dairas)', size = 16)

py.xticks(rotation = 90)
ax = sns.barplot(x = df.p_daira.value_counts().nlargest(10).index, 
            y = df.p_daira.value_counts().nlargest(10) / df.shape[0] * 100,
                 ax = ax0)
ax.set(xlabel='Pickup Daira', ylabel='Trips percentage')
ax.set_xticks(rotation=90)

#py.xticks(rotation=90)
ax = sns.barplot(x = df.d_daira.value_counts().nlargest(10).index, 
            y = df.d_daira.value_counts().nlargest(10)/df.shape[0] * 100
                 , ax = ax1)
ax.set(xlabel='Dropoff Daira', ylabel='Trips percentage')

py.show()

Вот результат, который я получаю: Изображение

Даже если я установил поворот x_ticks на 90 градусов, он применимтолько ко второму сюжету!

Есть ли способ это исправить?

1 Ответ

0 голосов
/ 10 ноября 2019

Когда вы пишете py.xticks(rotation = 90), мы должны предположить, что вы импортировали matplotlib.pyplot as py (что возможно, но обычно сокращенно, а именно import matplotlib.pyplot as plt).

Однако, сказав это, обратите внимание, что, используя методы pyplot (т.е. py в вашем случае), вы всегда автоматически ссылаетесь на текущих активных осей , чтообычно последний созданный.

Если вы хотите явно вызывать функции определенных осей, используйте обозначения их объектов, например

ax1.xaxis.set_tick_params(rotation=90)
ax2.xaxis.set_tick_params(rotation=90)

Обратите внимание: если вам интересно, к чему это приведетчтобы при создании большего количества вспомогательных участков, таких как 3x3 или более, вы бы предпочли сохранить их все в массиве, например

import matplotlib.pyplot as plt
fig, axs = plt.subplots(3, 3)

, а затем получить доступ к отдельным осям путем индексации массива, например,

axs[0, 0].plot(x, y)
axs[1, 0].plot(z)
* 1021. * или
for ax in axs.flatten():
    ax.xaxis.set_tick_params(rotation=90)
...