2014-10-20 11 views
0

두 매개 변수로 제어 할 수있는 알고리즘이 있으므로이 매개 변수에 따라 알고리즘의 런타임을 계획하고 싶습니다.3 차원 플롯의 점 연결

내 코드 :

from matplotlib import pyplot 
import pylab 
from mpl_toolkits.mplot3d import Axes3D 

fig = pylab.figure() 
ax = Axes3D(fig) 

sequence_containing_x_vals = [5,5,5,5,10,10,10,10,15,15,15,15,20,20,20,20] 
sequence_containing_y_vals = [1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4] 
sequence_containing_z_vals = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] 

ax.scatter(sequence_containing_x_vals, sequence_containing_y_vals, sequence_containing_z_vals) 

pyplot.show() 

이 공간에있는 모든 포인트를 그릴 것입니다하지만 난 그들을 연결하고자이 같은 있습니다

Example plot

이 (착색이 좋은 것을하지만, 필요 없음)

답변

0

표면을 플롯하려면 plot_surface을 사용하고 데이터를 일반 2D 배열로 사용해야합니다 (이는 x-y 평면의 2D 지오메트리를 반영합니다). 보통 meshgrid이이 용도로 사용되지만 데이터에 이미 x 및 y 값이 적절하게 반복되어 있으므로이 값을 바꿀 필요가 있습니다. 나는 numpy로 이것을했다 reshape. X, Y = np.meshgrid([1,2,3,4], [5, 10, 15, 20])이 같은 XY 위와하지만 더 쉽게 줄 것이다

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

fig = pyplot.figure() 
ax = Axes3D(fig) 

sequence_containing_x_vals = np.array([5,5,5,5,10,10,10,10,15,15,15,15,20,20,20,20]) 
X = sequence_containing_x_vals.reshape((4,4)) 

sequence_containing_y_vals = np.array([1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4]) 
Y = sequence_containing_y_vals.reshape((4,4)) 

sequence_containing_z_vals = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]) 
Z = sequence_containing_z_vals.reshape((4,4)) 

ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.hot) 

pyplot.show() 

enter image description here

참고.

물론 여기에 표시된 표면은 데이터가 z = x + y - -5과 일치하기 때문에 단순한 평면이지만이 방법은 많은 matplotlib surface 예제에서 볼 수있는 것처럼 일반 표면에서도 작동합니다.