164 votes

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 superpose aux é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 une réputation assez élevée).

J'aimerais savoir s'il existe un moyen simple de décaler le titre directement vers le haut de quelques dizaines de pixels, afin que le graphique soit plus joli.

285voto

herrlich10 Points 461

Je ne sais pas si c'est une nouvelle fonctionnalité dans les versions ultérieures de matplotlib, mais au moins pour la 1.3.1, c'est tout simplement :

plt.title(figure_title, y=1.08)

Cela fonctionne également pour plt.suptitle() mais pas (encore) pour plt.xlabel() etc.

37voto

Hooked Points 16345

Oubliez l'utilisation plt.title et placer 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()

enter image description here

17voto

jmunsch Points 709

J'avais un problème avec l'étiquette x qui chevauchait le titre d'un sous-graphe ; ceci 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

enter image description here

après

enter image description here

référence :

11voto

Efkan Points 181
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, le tracé est dessiné juste en dessous du titre. Cela pourrait aussi être une solution rapide.

11voto

Radvin Points 101

Vous pouvez utiliser le tampon pour ce cas :

ax.set_title("whatever", pad=20)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X