web-dev-qa-db-fra.com

Le titre de la figure Python Matplotlib recouvre l’étiquette des axes lorsqu’on utilise twiny

J'essaie de tracer deux quantités distinctes sur le même graphique en utilisant le 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 le problème est que le titre de la figure se superpose aux étiquettes des axes sur l’axe x secondaire, de sorte qu’il est à peine lisible assez haut rep encore).

J'aimerais savoir s'il existe un moyen simple de déplacer le titre directement de quelques dizaines de pixels pour que le graphique soit plus joli.

111
Magic_Matt_Man

Je ne sais pas s'il s'agit d'une nouvelle fonctionnalité dans les versions ultérieures de matplotlib, mais du moins pour la version 1.3.1, il s'agit simplement de:

plt.title(figure_title, y=1.08)

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

202
herrlich10

Oubliez l'utilisation de plt.title et placez le texte directement avec plt.text. Un exemple surexagé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

29
Hooked
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 tracé juste en dessous du titre. Cela pourrait être une solution rapide aussi.

3
Efkan

J'avais un problème avec le x-label recouvrant 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

 enter image description here

après

 enter image description here

référence:

1
jmunsch

Utilisez simplement plt.tight_layout() avant plt.show(). Ça marche bien. 

0
Peter Zhu