2014-04-08 5 views
4

나는 x와 y의 값을 가진 2 차원 배열과 x 값에 해당하는 각 점과 z 값에 대응하는 각 점에 대한 z 값을 가진 2D 배열을 가지고 있습니다. y 값. 이 데이터로 plot_surface를 얻을 수있는 방법이 있습니까? 내가 그것을하려고 할 때 그것은 어떤 음모도 돌려 보내지 않는다. 여기에 코드입니다 : 당신은 당신의 플롯을 표시 plt.show() 전화를 잊었2D 배열을 사용한 3D 플롯 matplotlib

x=np.arange(0,10,1) 
y=np.arange(0,1,0.2) 
lx= len(x) 
ly=len(y) 

z=np.zeros((lx,ly)) 

for i in range(lx): 
    for j in range(ly): 
     z[i,j]=calculate_R(y[j],x[i]) 

fig = plt.figure() 
ax = Axes3D(fig) 
x, y = np.meshgrid(x, y) 
ax.plot_surface(x, y, z, rstride=1, cstride=1, cmap='hot') 

답변

5

(calculate_R 내가 프로그램을 위해 만들어진 기능입니다). 당신이 z의 계산 속도를 NumPy와 벡터화을 악용 할 수 있습니다

참고 : 완전히 동작하는 예제를 제공하지 않았기 때문에 여기

import numpy as np 
import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d.axes3d import Axes3D 

x = np.arange(0,10,1) 
y = np.arange(0,1,0.2) 

xs, ys = np.meshgrid(x, y) 
# z = calculate_R(xs, ys) 
zs = xs**2 + ys**2 

fig = plt.figure() 
ax = Axes3D(fig) 
ax.plot_surface(xs, ys, zs, rstride=1, cstride=1, cmap='hot') 
plt.show() 

, 나는, 간단한 함수를 사용했다.

+1

z를 'np.array' (행렬'mat')로 바꾸고'x','y'를'np.arange (0, xsize, 1)','np.arange (0 , ysize, 1)''xsize, ysize = mat.shape' 인 행렬의 3D 플롯을 얻으려면? – Karlo

+1

예, 가능합니다. –

+1

실제로 : [이 질문에] 참조 (http://stackoverflow.com/questions/43275798/how-to-plot-two-3d-plots-of-matrices-on-the-same-figure-with-same-scale -in-pytho/43275998? noredirect = 1 # comment73620775_43275998) – Karlo