Название рисунка Python Matplotlib перекрывает метку осей при использовании twiny


Я пытаюсь построить две отдельные величины на одном графике с помощью 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, так что он едва читаем (Я хотел опубликовать пример изображения здесь, но у меня еще нет достаточно высокой репутации).

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

5 106

5 ответов:

Я не уверен, что это новая функция в более поздних версиях matplotlib, но по крайней мере для 1.3.1, это просто:

plt.title(figure_title, y=1.08)

Это также работает для plt.suptitle(), но не (пока) для plt.xlabel() и т. д.

забудьте помощью 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()

enter image description here

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()

до

enter image description here

после

enter image description here

ссылки:

просто использовать plt.tight_layout() до plt.show(). Это хорошо работает.