Ранее в посте Задача двух осей и четырех графиков - игра с matplotlib
я рассмотрел разбиени холста на области и рисование нескольких графиков.
Пойдем дальше - рассмотим всякие подписи и для начала подпишем оси и графики
Вот код:
# создаем верхнюю область
plt.subplot(211)
# рисуем модель и реальные данные
plt.plot( x,y , x,yr ,'go')
# Именуем ось абсцисс как Х, а ось ординат как Y
plt.xlabel('X')
plt.ylabel('Y')
# называем график First Subplot
plt.title('First Subplot')
# Аналогичным образом добавляем подписи во втрой график
plt.subplot(212)
plt.plot( x,y2 , x,yr2 ,'bo');
plt.xlabel('X')
plt.ylabel('Y2')
plt.title('Second Subplot')
Как можно видеть - подписи появились но название нижнего графика перекрывает подпись оси абсцисс верхнего, что не очень красиво.
Выход из этого положения - увеличить вертикальные отступы, т.е. добавить в конце кода вверху вот эту строчку:
# устанавливаем вертикальные отступы - Height Space
# значение по-умолчанию - 0.2
plt.subplots_adjust(hspace=0.70)
Теперь ничего не перехлестывается. Значение отступа легко подбирается эмпирически.
В случае использование subplots подписи ставятся несколько другими функциями, которые отличаются по факту префиксом set_ :
fig, ( ax_up, ax_btm) = plt.subplots(2,1)
ax_up.plot( x,y , x,yr ,'go')
ax_btm.plot( x,y2 , x,yr2 ,'bo')
ax_up.set_xlabel('X')
# при установке можно также указать цвет и размер шрифта
ax_up.set_ylabel('Y', color='red', fontsize=14)
ax_up.set_title('First Subplot', color='green', fontsize=14)
ax_btm.set_xlabel('X')
ax_btm.set_ylabel('Y2')
ax_btm.set_title('Second Subplot')
plt.subplots_adjust(hspace=0.70)
Установка цвета и размера также работает и при вызове subplot т.е. скажем так:
plt.ylabel('Y', color='red', fontsize=14)
Следующий шаг - это добавление легенд - т.е. название отдельных данных на графике. При этом придется расстаться с рисованием нескольких данных одним махом:
# вместо вот такого использования
plt.plot( x,y , x,yr ,'go')
# будет вот так
plt.plot( x,y )
plt.plot( x,yr ,'go')
Во втором варианте можно как раз добавить и подписи через label:
plt.subplot(211)
# ставим легенду для модельного графика
plt.plot( x,y, label='Model')
# ставим легенду для реального графика
plt.plot( x,yr ,'go', label='Real')
plt.xlabel('X')
plt.ylabel('Y', color='red', fontsize=14)
plt.title('First Subplot', color='green', fontsize=14)
# делаем легенды видимыми для верхнего графика
plt.legend().set_visible(True)
plt.subplot(212)
plt.plot( x,y2 , x,yr2 ,'bo');
plt.xlabel('X')
plt.ylabel('Y2')
plt.title('Second Subplot')
plt.subplots_adjust(hspace=0.70)
Замечание: если вызвать plt.legend().set_visible(True) и для нижнего графика то просто получим предупреждение "No handles with labels found to put in legend." поскольку подписи данных мы не задавали.
No comments:
Post a Comment