2011-07-06 1 views
11

J'essaie de créer un tracé de surface dans matplotlib, mais je n'arrive pas à faire en sorte que la mise en forme de l'axe z soit bonne. Je veux que ce soit sur la notation scientifique, avec le préfixe le long de l'axe et l'exposant au-dessus de l'axe (comme ce que vous obtenez habituellement dans matlab). Pour l'instant, je ne peux obtenir les valeurs sans notation scientifique (avec une virgule et cinq zéros à l'avant), ou je reçois les préfixes, mais pas l'exposant ...Mise en forme de l'axe z dans mplot3d

Essayez 1: (donne la notation scientifique, mais pas le exposant)

from matplotlib import ticker 

ax = fig.gca(projection='3d') 
ax.plot_surface(X, Y, Z, rstride=3, cstride=3) 
formatter = ticker.ScalarFormatter() 
formatter.set_scientific(True) 
formatter.set_powerlimits((-2,2)) 
ax.w_zaxis.set_major_formatter(formatter) 

Essayez 2: (donne les valeurs de forme décimale, même en sortie par défaut)

from matplotlib import ticker 

ax = fig.gca(projection='3d') 
ax.plot_surface(X, Y, Z, rstride=3, cstride=3) 
ax.ticklabel_format(axis="z", style="sci", scilimits=(0,0)) 

Qu'est-ce que je fais mal ici?

+1

Quelle version de matplotlib utilisez-vous? Vous avez peut-être rencontré un bug qui n'a pas été corrigé avant la version 1.0.1. http://old.nabble.com/Displaying-offsets-in-3d-plots-td30474615.html –

+1

@Stephen Terry: Je cours 1.0.1. 'Python 2.7.1 | EPD 7.0-2 (32 bits) | (r271: 86832, déc 3 2010, 15:41:32) [GCC 4.0.1 (Apple Inc. build 5488)] sur darwin >>> importer matplotlib >>> matplotlib .__ version__ '1.0.1' ' – Magnus

Répondre

3

Lorsque vous créez votre ScalarFormatter, essayez le paramètre "utiliser Math texte":

from matplotlib import ticker 
niceMathTextForm = ticker.ScalarFormatter(useMathText=True) 
ax.w_zaxis.set_major_formatter(niceMathTextForm) 
+1

useOffset = false est sympa aussi pour la notation scientifique – denfromufa