2013-07-08 2 views
1

mplot3d 함수 plot_surface은 서페이스를 정의하는 점의 좌표를 3 개의 2D 배열 인 X, Y, Z로 입력해야합니다. 다음은 이러한 배열의 구성을 보여주는 작업 예제입니다. I는 X가 Y는 Z의 각 U 의해 파라미터 구면 좌표로 좌표 표현 V.3D 플로팅 : 2D 배열로 좌표 인수를 입력하는 이유는 무엇입니까?

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

fig = plt.figure() 
ax = fig.add_subplot(111, projection = '3d') 

# generate the coordinates on the surface by parameterizing 
u = np.linspace(0, 2 * np.pi, 100) 
v = np.linspace(0, 2 * np.pi, 100) 
x = np.outer(np.cos(u), np.sin(v)) 
y = np.outer(np.sin(u), np.sin(v)) 
z = np.outer(np.ones(np.size(u)), np.cos(v)) 

ax.plot_surface(x, y, z) 
plt.show() 

I은 ​​X, Y, Z로 표시되는 좌표가 정확하게 [X[i,j], Y[i,j], Z[i,j]] 내가 위에 인덱싱 모든 트리플렛의 집합이라고 생각 및 j. (1) 이것이 맞습니까?

실제 음모를 구성하기 위해 필자가 작성한 많은 기능은 위의 삼중 항의 형식으로 세 쌍의 목록 인 인수를 취합니다. 즉 points = [[x1,y1,z1], [x2,y2,z2], ..., [xn, yn, zn]]입니다. 나는이 입력이 plot_surface에 의해 받아 들여지기를 기대했지만, 그렇지 않습니다. 결과적으로 저는 두 표현 사이를 상당히 빈번하게 변환해야한다고 생각합니다. via

points = zip(*[x.flatten() for x in (X,Y,Z)]) 

나는 그렇게 할 수 있지만 내 자신의 기능에도 2D 배열 형식을 사용해야한다고 걱정한다. (2) 배열 입력 형식이 이러한 배열의 구성을 프로그래밍하기 쉬운 이유가 있습니까? 예를 들어, 계산이 더 효율적입니까?

답변

1

표면 플롯은 아마도 삼각형 메쉬로 그려집니다. 점의 2D 배열을 전달하면 어느 점이 각 삼각형에 포함되어야하는지 명확하게 알 수 있습니다 (아마도 [i][j]-[i+1][j]-[i][j+1][i][j+1]-[i+1][j]-[i+1][j+1]).