Я пытаюсь построить две отдельные величины на одном графике, используя twiny следующим образом:
fig = figure()
ax = fig.add_subplot(111)
ax.plot(T, r, 'b-', T, R, 'r-', T, r_geo, 'g-')
ax.set_yscale('log')
ax.annotate('Approx. sea level', xy=(Planet.T_day*1.3,(Planet.R)/1000), xytext=(Planet.T_day*1.3, Planet.R/1000))
ax.annotate('Geostat. orbit', xy=(Planet.T_day*1.3, r_geo[0]), xytext=(Planet.T_day*1.3, r_geo[0]))
ax.set_xlabel('Rotational period (hrs)')
ax.set_ylabel('Orbital radius (km), logarithmic')
ax.set_title('Orbital charts for ' + Planet.N, horizontalalignment='center', verticalalignment='top')
ax2 = ax.twiny()
ax2.plot(v,r,'k-')
ax2.set_xlabel('Linear speed (ms-1)')
show()
и данные представлены нормально, но у меня проблема в том, что заголовок рисунка перекрывается с метками осей на вторичной оси x, поэтому он едва читается (я хотел опубликовать здесь пример изображения, но у меня нет достаточно высокое повторение).
Я хотел бы знать, есть ли простой способ просто сместить заголовок на несколько десятков пикселей вверх, чтобы диаграмма выглядела красивее.
python
matplotlib
title
figure
Magic_Matt_Man
источник
источник
Ответы:
Я не уверен, что это новая функция в более поздних версиях matplotlib, но по крайней мере для 1.3.1 это просто:
plt.title(figure_title, y=1.08)
Это также работает
plt.suptitle()
, но (пока) не дляplt.xlabel()
и т. Д.источник
labelpad
, см. Здесь .title
принималx
иy
аргументировал очень давно (сколько себя помню, во всяком случае).Забудьте об использовании
plt.title
и поместите текст непосредственно сplt.text
. Ниже приводится преувеличенный пример:import pylab as plt fig = plt.figure(figsize=(5,10)) figure_title = "Normal title" ax1 = plt.subplot(1,2,1) plt.title(figure_title, fontsize = 20) plt.plot([1,2,3],[1,4,9]) figure_title = "Raised title" ax2 = plt.subplot(1,2,2) plt.text(0.5, 1.08, figure_title, horizontalalignment='center', fontsize=20, transform = ax2.transAxes) plt.plot([1,2,3],[1,4,9]) plt.show()
источник
tight_layout
все еще не очень хорошо работает с нестандартными размещениями. Возможно, вы могли бы сообщить об ошибке?title = plt.title(...)
тогда вы можете указать, чтобы сюжет был плотно обрамлен вокруг заголовка, используя опциюbbox_extra_artists
:figure.savefig(filename, bbox_extra_artists=(title), bbox_inches='tight')
ax.set_title('My Title\n', fontsize="15", color="red") plt.imshow(myfile, origin="upper")
Если вы поставите
'\n'
сразу после строки заголовка, график будет нарисован сразу под заголовком. Это тоже может быть быстрым решением.источник
У меня была проблема с x-меткой, перекрывающей заголовок подзаговора; это сработало для меня:
import matplotlib.pyplot as plt fig, ax = plt.subplots(2, 1) ax[0].scatter(...) ax[1].scatter(...) plt.tight_layout() . . . plt.show()
перед
после
Справка:
источник
Просто используйте
plt.tight_layout()
раньшеplt.show()
. Это работает хорошо.источник
В этом случае можно использовать площадку:
ax.set_title("whatever", pad=20)
источник