2011-07-06 16 views
11

Matplotlib'de bir yüzey çizimi yapmaya çalışıyorum, ancak z ekseninin biçimlendirmesini iyi yapamıyorum. Eksen boyunca önek ve eksenin üzerindeki üs ile (genellikle matlab'da aldığınız gibi) bilimsel gösterimde olmasını istiyorum. Şu anda sadece bilimsel notasyon olmadan değerleri (ön virgül ve beş sıfır) almadan alabilirim, ya da önekleri alırım ama üssü değil ...mplot3d'de z ekseni formatlama

1 deneyin: (bilimsel gösterim sağlar, ancak üs)

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) 

deneyin 2: (burada yanlış yapıyorum varsayılan çıkışı ile aynı ondalık formda değerleri,)

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

verir?

+1

kullandığınız matplotlib sürümü? 1.0.1'e kadar düzeltilmeyen bir hataya koşuyor olabilirsiniz. http://old.nabble.com/Displaying-offsets-in-3d-plots-td30474615.html –

+1

@Stephen Terry: 1.0.1 çalıştırıyorum. 'Python 2.7.1 | EPD 7.0-2 (32 bit) Üste | (r271: 86832, 3 Aralık 2010, 15:41:32) [GCC 4.0.1 (Apple Inc. yapı 5488)] darwin üzerinde >>> import matplotlib >>> matplotlib .__ version__ '1.0.1' ' – Magnus

cevap

3

size ScalarFormatter, deneyin "kullanmak Matematik Metin" parametresini oluştururken:

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

useOffset = false bilimsel gösterim için de iyidir – denfromufa