Заголовок рисунка 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()
и данные представлены отлично, но у меня возникает проблема с тем, что заголовок рисунка перекрывается с метками осей на вторичной оси х, так что он едва различим (я хотел опубликовать пример рисунка здесь, но я не знаю, t имеют достаточно высокую репутацию).
Я хотел бы знать, есть ли простой способ просто сдвинуть название непосредственно на несколько десятков пикселей, чтобы диаграмма выглядела красивее.
Ответы
Ответ 1
Я не уверен, является ли это новой функцией в более поздних версиях matplotlib, но, по крайней мере, для 1.3.1, это просто:
plt.title(figure_title, y=1.08)
Это также работает для plt.suptitle()
, но пока (пока) для plt.xlabel()
и т.д.
Ответ 2
Забудьте использовать 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]()
Ответ 3
ax.set_title('My Title\n', fontsize="15", color="red")
plt.imshow(myfile, origin="upper")
Если вы поместите '\n'
сразу после строки заголовка, сюжет рисуется чуть ниже названия. Это может быть и быстрое решение.