Как настроить интервал субплотов и разместить метки y в matplotlib? - PullRequest
0 голосов
/ 25 ноября 2018

Мне нужно использовать matplotlib для создания следующего макета.

fig = plt.figure(figsize=(15,9))
for i in range(3):
    ax = plt.subplot2grid((3, 5), [i, 0], 1, 1 )
for i in range(3):
    ax = plt.subplot2grid((3, 5), [i, 1], 1, 1 )
for i in range(3):
    ax = plt.subplot2grid((3, 5), [i, 2], 1, 3 )

enter image description here Я хотел бы добавить пробел между вторым и третьим столбцами в местеобщий илабел , обозначенный красным маркером.Я застрял в этой точке.Кто-нибудь может дать мне руководство?Спасибо!

1 Ответ

0 голосов
/ 25 ноября 2018

Если ваша метка не длинная, вы можете просто добавить ее к среднему графику и использовать tight_layout для ее форматирования:

fig = plt.figure(figsize=(15,9))
for i in range(3):
    ax = plt.subplot2grid((3, 5), [i, 0], 1, 1 )
for i in range(3):
    ax = plt.subplot2grid((3, 5), [i, 1], 1, 1 ) 
for i in range(3):
    ax = plt.subplot2grid((3, 5), [i, 2], 1, 3 )
    if i == 1:
        ax.set_ylabel("label for all")

plt.tight_layout()
plt.show()

Однако это не будет работать для очень длинных меток, потому что tight_layout будет неверно истолковывать высоту среднего ряда.В этом случае мы можем просто заменить текст более длинной версией:

fig = plt.figure(figsize=(15,9))
for i in range(3):
    ax = plt.subplot2grid((3, 5), [i, 0], 1, 1 )
for i in range(3):
    ax = plt.subplot2grid((3, 5), [i, 1], 1, 1 ) 
for i in range(3):
    ax = plt.subplot2grid((3, 5), [i, 2], 1, 3 )
    if i == 1:
        mylabel = ax.set_ylabel("dummy")

plt.tight_layout()

mylabel.set_text("not a dummy any more but a very very very loooooooooooooooooong label")
plt.show()

Пример вывода: enter image description here

...