Le titre de la figure Python Matplotlib chevauche l'étiquette des axes lors de l'utilisation de twiny
J'essaie de tracer deux quantités distinctes sur le même graphique en utilisant twiny comme suit:
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()
Et les données sont bien présentées, mais j'ai le problème que le titre de la figure se chevauche avec les étiquettes des axes sur l'axe x secondaire de sorte qu'il est à peine lisible (je voulais poster un exemple d'image ici, mais je n'ai pas encore un représentant assez élevé).
J'aimerais savoir s'il existe un moyen simple de simplement déplacer le titre directement de quelques dizaines de pixels, de sorte que le graphique semble plus joli.
5 réponses
Je ne suis pas sûr que ce soit une nouvelle fonctionnalité dans les versions ultérieures de matplotlib, mais au moins pour 1.3.1, c'est simplement:
plt.title(figure_title, y=1.08)
Cela fonctionne aussi pour les plt.suptitle()
, mais pas (encore) de plt.xlabel()
, etc.
Oubliez d'utiliser plt.title
et placez le texte directement avec plt.text
. Un exemple exagéré est donné ci-dessous:
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()
ax.set_title('My Title\n', fontsize="15", color="red")
plt.imshow(myfile, origin="upper")
Si vous mettez '\n'
juste après votre chaîne de titre, l'intrigue est tracée juste en dessous du titre. Cela pourrait être une solution rapide aussi.
J'avais un problème avec le x-label chevauchant un titre de sous-parcelle; cela a fonctionné pour moi:
import matplotlib.pyplot as plt
fig, ax = plt.subplots(2, 1)
ax[0].scatter(...)
ax[1].scatter(...)
plt.tight_layout()
.
.
.
plt.show()
Avant
Après
Référence:
Utilisez simplement plt.tight_layout()
avant plt.show()
. Il fonctionne bien.