2017-02-21 11 views
-1

이 나는 ​​컬러 맵으로 도시 된 제 4 차원으로, 다음 코드를 사용하기 matplotlib에서 4D 플롯을 할 수 있다는 사실을 알고 : 내 데이터는 다른 데이터의 함수가 아니다np.meshgrid없이 matplotlib의 4D 플롯을 수행하는 방법?

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

fig = plt.figure() 
ax = fig.add_subplot(111,projection= '3d') 
x = np.arange(100)/ 101 
y = np.sin(x) + np.cos(x) 
X,Y = np.meshgrid(x,y) 
Z = (X**2)/(Y**2) 
A = np.sin(Z) 

ax.plot_surface(X,Y, Z, facecolors=cm.Oranges(A)) 
plt.show() 

하지만 경우에? np.meshgrid없이 어떻게 할 수 있습니까? (즉, Z는 X와 Y의 함수가 아니기 때문에 내 Z 시리즈는 np.meshgrid (x, y)의 출력 인 X, Y 출력의 함수가 될 수 없습니다.

답변

0

표면 플롯은 2D 점을 1D 값으로 매핑합니다. 즉 (x,y) 좌표의 각 쌍에 정확히 z 좌표가 필요합니다. 따라서 ZXY의 함수 일 필요는 없지만 플롯 할 배열은 동일한 수의 요소를 가져야합니다.

plot_surface의 경우 제한은 격자 형 2D 데이터로 XY입니다. Z은 2D 일 필요는 없지만 같은 수의 요소가 있어야합니다.

이 요구하여 약화 될 수있는 유일한 요구가 X에서 i 번째 값, 즉 X, Y, Z의 엄격한 매핑하고 Y가 Z.

i 번째 값에 해당하는 것이다 plot_trisurf

어쨌든 XYZ으로 매핑하는 분석 기능이 없더라도 Z은 여전히 ​​어떤 종류의 매핑이되어야합니다. 그렇지 않은 경우 결과 플롯에서 어떤 정보가 전달되는지는 의문의 여지가 있습니다.

+0

X와 Y를 meshgrid로하여 Z를 2 차원 배열로 만들었더라도 plot_surface를 수행 할 수 없었고 plot_trisurf를 시도했을 때 Source에서이 예외로 ValueError가 발생했습니다. if self.x.shape! = self .y.shape 또는 len (self.x.shape)! = 1 : ValueError를 발생시킵니다. 하지만 x.shape와 y.shape를 확인하면 길이가 1 인 출력이 (99)가됩니다. 그때부터 오류가 어디서 발생합니까? –

+0

오류가 발생한 코드를 알지 못한 채로 내가 도와 드릴 수있는 것이 거의 없다는 것을 이해하시기 바랍니다. 오류를 생성하는 코드의 [mcve]로 질문을 편집하고 명확한 문제 설명을 제공 할 수 있습니다. – ImportanceOfBeingErnest