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.
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.
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()
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.
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()
référence:
Utilisez simplement plt.tight_layout()
avant plt.show()
. Ça marche bien.