web-dev-qa-db-de.com

Der Titel der Python-Matplotlib-Abbildung überlappt die Achsenbeschriftung bei Verwendung von twiny

Ich versuche, zwei getrennte Größen in derselben Grafik zu zeichnen, indem wir twiny wie folgt verwenden:

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

und die Daten werden gut dargestellt, aber ich habe das Problem, dass sich der Titel der Abbildung mit den Achsenbeschriftungen auf der sekundären X-Achse überschneidet, so dass es kaum lesbar ist (ich wollte hier ein Bildbeispiel posten, aber ich habe keine hoch genug rep noch).

Ich würde gerne wissen, ob es eine unkomplizierte Möglichkeit gibt, den Titel direkt um einige Dutzend Pixel nach oben zu verschieben, sodass das Diagramm schöner aussieht.

111
Magic_Matt_Man

Ich bin nicht sicher, ob es eine neue Funktion in späteren Versionen von matplotlib ist, aber zumindest für 1.3.1 lautet das einfach:

plt.title(figure_title, y=1.08)

Dies funktioniert auch für plt.suptitle(), aber (noch) nicht für plt.xlabel() usw.

202
herrlich10

Vergessen Sie die Verwendung von plt.title und platzieren Sie den Text direkt mit plt.text. Ein übertriebenes Beispiel ist unten angegeben:

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

29
Hooked
ax.set_title('My Title\n', fontsize="15", color="red")
plt.imshow(myfile, Origin="upper")

Wenn Sie '\n' direkt nach Ihrer Titelzeichenfolge einfügen, wird die Zeichnung direkt unter dem Titel gezeichnet. Das könnte auch eine schnelle Lösung sein.

3
Efkan

Ich hatte ein Problem mit dem X-Label, das einen Untertitel-Titel überschneidet. das hat für mich funktioniert:

import matplotlib.pyplot as plt
fig, ax = plt.subplots(2, 1)
ax[0].scatter(...)
ax[1].scatter(...)
plt.tight_layout()
.
.
.
plt.show()

vor

 enter image description here

nach dem

 enter image description here

referenz:

1
jmunsch

Verwenden Sie einfach plt.tight_layout() vor plt.show(). Es läuft gut. 

0
Peter Zhu