Ich versuche, zwei separate Größen mit Twiny wie folgt auf demselben Diagramm darzustellen:
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 Figurentitel mit den Achsenbeschriftungen auf der sekundären x-Achse überlappt, so dass er kaum lesbar ist (ich wollte hier ein Bildbeispiel posten, habe aber kein hoch genug rep noch).
Ich würde gerne wissen, ob es eine einfache Möglichkeit gibt, den Titel direkt um einige zehn Pixel nach oben zu verschieben, damit das Diagramm hübscher aussieht.
python
matplotlib
title
figure
Magic_Matt_Man
quelle
quelle
Antworten:
Ich bin nicht sicher, ob es sich um eine neue Funktion in späteren Versionen von matplotlib handelt, aber zumindest für 1.3.1 ist dies einfach:
Dies funktioniert auch für
plt.suptitle()
, aber (noch) nicht fürplt.xlabel()
usw.quelle
labelpad
, finden Sie hier .title
hatx
undy
Argumente für eine sehr lange Zeit genommen (so lange ich mich erinnern kann, jedenfalls).Vergessen Sie die Verwendung
plt.title
und platzieren Sie den Text direkt mitplt.text
. Ein übertriebenes Beispiel ist unten angegeben:quelle
tight_layout
scheint immer noch nicht gut mit nicht standardmäßigen Placements zu spielen. Vielleicht könnten Sie einen Fehlerbericht erstellen?title = plt.title(...)
dann können Sie angeben, um die Handlung eng um den Titel zu rahmen, indem Sie die Option verwendenbbox_extra_artists
:figure.savefig(filename, bbox_extra_artists=(title), bbox_inches='tight')
Wenn Sie
'\n'
direkt nach Ihrer Titelzeichenfolge setzen, wird der Plot direkt unter dem Titel gezeichnet. Das könnte auch eine schnelle Lösung sein.quelle
Ich hatte ein Problem mit dem x-Label, das einen Nebenhandlungstitel überlappte. das hat bei mir funktioniert:
Vor
nach dem
Referenz:
quelle
Einfach
plt.tight_layout()
vorher verwendenplt.show()
. Es funktioniert gut.quelle
Sie können Pad für diesen Fall verwenden:
quelle