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.

106
demandé sur Magic_Matt_Man 2012-10-05 20:26:49

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.

190
répondu herrlich10 2014-04-28 10:14:27

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

entrez la description de l'image ici

29
répondu Hooked 2014-05-26 16:14:05
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.

3
répondu Efkan 2017-09-29 07:45:09

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

entrez la description de l'image ici

Après

entrez la description de l'image ici

Référence:

1
répondu jmunsch 2018-07-05 05:56:29

Utilisez simplement plt.tight_layout() avant plt.show(). Il fonctionne bien.

0
répondu Peter Zhu 2018-08-24 06:10:59