2012-11-04 192 views
4
二維數組

所以我有一個二維數組(名爲Data),看起來像:繪製與Matplotlib

  Shape 0  Shape 1  ...  Shape N 
      -------  -------    ------- 

Scale 0 | Value00 , Value01  ...  Value0N | 

Scale 1 | Value10 , Value11  ...  Value1N | 

    . 
    . 
    . 

Scale N | ValueN0 , ValueN1  ...  ValueNN | 

我想創建一個三維圖,其中ValueXXs是Z軸。我嘗試了兩次嘗試,但每次都會給我一個相對於另一個旋轉的表面,所以我感到有點困惑。這是我在一個解決方案1的嘗試:

x,y = numpy.mgrid[0:50:50j,0:50:50j] 
f = Data 
fig = plt.figure() 
ax = Axes3D(fig) 
ax.plot_surface(x,y,f,rstride=1,cstride=1) 

這裏是我的第二次嘗試:

nx, ny = 50, 50 
x = range(nx) 
y = range(ny) 
hf = plt.figure() 
ha = hf.add_subplot(111, projection='3d') 
X, Y = numpy.meshgrid(x, y) 
ha.plot_surface(X,Y,Data,rstride=1,cstride=1) 

檢查X和Y確實沒有任何幫助真的是因爲它是一個正方形。我不確定何時X代表我的'比例',而不是代表我的'形狀'。

那麼,這兩個例子到底發生了什麼?有沒有更好的方法來繪製這個數組?

謝謝!

+0

我發現當我有這樣的情況下,它通常是最容易故意產生具有不同的x和y軸的尺寸的測試數據集。這將使您能夠檢查繪圖,並且在某些情況下(例如,pcolor),如果您錯誤地指定了x和y軸陣列,它將引發錯誤。 – DaveP

回答

1

如果我理解你說得對,混淆是哪個軸是哪個,對吧?如果是這種情況,你可以很容易地繪製一個已知的不對稱形狀,情節會告訴你一切。例如,採用an example from the gallery

# By Armin Moser 

from mpl_toolkits.mplot3d import Axes3D 
import matplotlib 
import numpy as np 
from matplotlib import cm 
from matplotlib import pyplot as plt 
step = 0.04 
maxval = 1.0 
fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 

# create supporting points in polar coordinates 
r = np.linspace(0,1.25,50) 
p = np.linspace(0,2*np.pi,50) 
R,P = np.meshgrid(r,p) 
# transform them to cartesian system 
X,Y = R*np.cos(P),R*np.sin(P) 

#Z = ((R**2 - 1)**2) 
Z = (X**2 + 0.2*Y**2 -1)**2 # <------- edit 

ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet) 
#ax.set_zlim3d(0, 1) 
ax.set_xlabel(r'$\phi_\mathrm{real}$') 
ax.set_ylabel(r'$\phi_\mathrm{im}$') 
ax.set_zlabel(r'$V(\phi)$') 
plt.show() 
+0

那麼,基本上我想知道這兩種方法的行爲差異。 我盯着情節一會兒,發現一條網格線有一個獨特的形狀。通過繪製它,我能夠區分方法1的作用。 基本上,我的方法1從字面上繪製了我想要的數組。行對應於X軸,列對應於Y軸。 如果任何人都可以給出兩種方法行爲的更詳細的答案,這對我和其他人會有很大的幫助。 謝謝! –