Несовместимое выравнивание заголовка и субтитра в matplotlib - PullRequest
1 голос
/ 07 октября 2019

Я пытаюсь использовать как ax.set_title(), так и plt.suptitle() для включения заголовка и подзаголовка в график, но эти два, похоже, не имеют одинакового выравнивания. Например, следующее:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

cats = ('One', 'Two')
vals = (12, 4) 

ax.barh(cats, vals, align='center')
plt.suptitle('Title')
ax.set_title('Title')
plt.show()

Дает нам следующие смещенные названия:

Misaligned titles with short y labels

Как я могу получить эти два названияправильно выровнять? Я подумал, что это может быть связано с выравниванием ax.title по оси и выравниванием plt.suptitle по фигуре, но тестирование намного более длинной метки y, похоже, не влияет на смещение:

fig, ax = plt.subplots()

cats = ('One million tiny engines running at one hundred miles per hour', 'Two')
vals = (12, 4) 

ax.barh(cats, vals, align='center')
plt.suptitle('Title')
ax.set_title('Title')
plt.show()

Misaligned titles with long y label

Ответы [ 3 ]

2 голосов
/ 07 октября 2019

matplotlib выравнивает субтитры с цифрой , а заголовок с субплотом . Вы можете вручную перемещать субтитры, используя fig.subplotpars:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

cats = ('One', 'Two')
vals = (12, 4) 

# Mid point of left and right x-positions
mid = (fig.subplotpars.right + fig.subplotpars.left)/2

ax.barh(cats, vals, align='center')
plt.suptitle('Title',x=mid)
ax.set_title('Title')
plt.show()

Fixed title

Наслаждайтесь!

1 голос
/ 07 октября 2019

Я знаю, что это не идеальный ответ и, в основном, репост моего комментария, но здесь ничего не сказано:

fig, ax = plt.subplots()

cats = ('hour', 'Two')
vals = (12, 4) 
ax.barh(cats, vals, align='center')
plt.figtext(.5,.95,'Foo Bar', fontsize=18, ha='center')
plt.figtext(.5,.9,'lol bottom text',fontsize=10,ha='center')
plt.show()

Вам необходимо вручную настроить значения .95 и .9 в зависимости от шрифтаРазмеры хотя.

0 голосов
/ 08 октября 2019

Если вам действительно не нужно subtitle

fig, ax = plt.subplots()

cats = ('One million tiny engines running at one hundred miles per hour', 'Two')
vals = (12, 4) 

ax.barh(cats, vals, align='center')
ax.set_title('Title\nTitle')
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...