2014-02-27 1 views
2

시간이지나면서 진화하는 3D 선 궤도를 그려보고자하며, 시간이 지나가도록 색을 변경하고 싶습니다 (예 : 하늘색에서 진한 파란색까지). 그러나 matplotlib의 Line3DCollection 사용에 대한 자습서가 부족합니다. this is the closest 찾을 수는 있지만 모두 내가 흰 선을 얻고 있습니다.Matplotlib Line3 시간에 따라 변하는 색상을위한 색상 표기

여기 내 코드가 있습니다.

import matplotlib.pyplot as plot 
from mpl_toolkits.mplot3d.axes3d import Axes3D 
from mpl_toolkits.mplot3d.art3d import Line3DCollection 
import numpy as np 

# X has shape (3, n) 
c = np.linspace(0, 1., num = X.shape[1])[::-1] 
a = np.ones(shape = c.shape[0]) 
r = zip(a, c, c, a) # an attempt to make red vary from light to dark 

# r, which contains n tuples of the form (r,g,b,a), looks something like this: 
# [(1.0, 1.0, 1.0, 1.0), 
# (1.0, 0.99998283232330165, 0.99998283232330165, 1.0), 
# (1.0, 0.9999656646466033, 0.9999656646466033, 1.0), 
# (1.0, 0.99994849696990495, 0.99994849696990495, 1.0), 
# ..., 
# (1.0, 1.7167676698312416e-05, 1.7167676698312416e-05, 1.0), 
# (1.0, 0.0, 0.0, 1.0)] 

fig = plot.figure() 
ax = fig.gca(projection = '3d') 

points = np.array([X[0], X[1], X[2]]).T.reshape(-1, 1, 3) 
segs = np.concatenate([points[:-1], points[1:]], axis = 1) 
lc = Line3DCollection(segs, colors = r) 
ax.add_collection3d(lc) 

ax.set_xlim(-0.45, 0.45) 
ax.set_ylim(-0.4, 0.5) 
ax.set_zlim(-0.45, 0.45) 

plot.show() 

그러나, 여기에 내가 무엇을 얻을 : 흰색 선 세그먼트의

3d temporal color change plot

그냥 무리, 색상에 어떤 변화. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 감사!

+0

무엇 '과 같이 r'는 무엇입니까? 작은 샘플이면 충분합니다. 시작과 끝 부분에 몇 줄이 좋습니다! – PearsonArtPhoto

+0

정의 아래에'r'의 구조를 추가했습니다. – Magsol

답변

3

코드가 제대로 작동하므로 여기에 약간의 샘플이 있습니다. 기본적으로 이것은 사용자 정의 X 세트가있는 코드입니다.

fig = plot.figure(); 
ax = fig.gca(projection = '3d') 
X = [(0,0,0,1,0),(0,0,1,0,0),(0,1,0,0,0)] 
points = np.array([X[0], X[1], X[2]]).T.reshape(-1, 1, 3) 
r = [(1.0, 1.0, 1.0, 1.0), (1.0, 0.75, 0.75, 1.0), (1.0, 0.5, 0.5, 1.0), (1.0, 0.25, 0.25, 1.0), (1.0, 0.0, 0.0, 1.0)]; 

segs = np.concatenate([points[:-1], points[1:]], axis = 1) 
ax.add_collection(Line3DCollection(segs,colors=list(r))) 

plot.show() 

그리고 줄거리는 다음과 같습니다

enter image description here

+0

추가 Matplotlib 예제는 * always * welcome입니다. 다시 한번 감사드립니다! – Magsol

1

와우, 그래서 문제가 r 보이는 이유 X모양 (3, n)하지만 (3, n^10)처럼 오히려 무언가의,하지만 난 단지 n 포인트 음모를 꾸미고 있었다, 따라서 색상을 변경하지 않을 것처럼 실제로이었다 (그리고이었다 밝혀 매우 작은 간격을 가지고 ... 내가 단지 250 명을 그렸을 때 5 만 8 천 점이있었습니다.)

그렇습니다. 버그였습니다. 미안합니다; 이제는 잘 작동합니다.

+1

나는 궁금해하기 시작했다. – PearsonArtPhoto

+0

무례 함을 의도하지 않았으므로 다른 독자를 도울 가능성이 거의 없으므로이 질문을 끝내기로했다. – Hooked

+0

@Hooked :이 작업을 수행하는 방법에 대한 올바른 코드 샘플이며 웹에서 찾을 수있는 것이 없습니다. 그것은 유용 할 수 있습니다, 나는 주위에 그것을 유지하는 경향이있을 것입니다 ... – PearsonArtPhoto

관련 문제