2012-05-13 2 views
12

아래 코드에서 두 개의 코드 행에 의해 생성 된 산란 점의 각 쌍 (즉, 녹색 원과 노란색 화살표를 연결)을 연결하는 선을 어떻게 만들 수 있습니까? .show() 명령 바로 앞의 끝?Python과 matplotlib의 3D scatter 플롯에 두 점 연결

import matplotlib.pyplot 
from mpl_toolkits.mplot3d import Axes3D 

dates  = [20020514, 20020515, 20020516, 20020517, 20020520] 
highs  = [1135, 1158, 1152, 1158, 1163] 
lows  = [1257, 1253, 1259, 1264, 1252] 
upperLimits = [1125.0, 1125.0, 1093.75, 1125.0, 1125.0] 
lowerLimits = [1250.0, 1250.0, 1156.25, 1250.0, 1250.0] 

zaxisvalues0= [0, 0, 0, 0, 0] 
zaxisvalues1= [1, 1, 1, 1, 1] 
zaxisvalues2= [2, 2, 2, 2, 2] 

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

ax.plot(dates, zaxisvalues1, lowerLimits, color = 'b') 
ax.plot(dates, zaxisvalues2, upperLimits, color = 'r') 

ax.scatter(dates, zaxisvalues0, highs, color = 'g', marker = "o") 
ax.scatter(dates, zaxisvalues0, lows, color = 'y', marker = "^") 

matplotlib.pyplot.show() 

답변

17

그 점 사이의 선분을 그립니다 :

import matplotlib.pyplot 
from mpl_toolkits.mplot3d import Axes3D 

dates  = [20020514, 20020515, 20020516, 20020517, 20020520] 
highs  = [1135, 1158, 1152, 1158, 1163] 
lows  = [1257, 1253, 1259, 1264, 1252] 
upperLimits = [1125.0, 1125.0, 1093.75, 1125.0, 1125.0] 
lowerLimits = [1250.0, 1250.0, 1156.25, 1250.0, 1250.0] 

zaxisvalues0= [0, 0, 0, 0, 0] 
zaxisvalues1= [1, 1, 1, 1, 1] 
zaxisvalues2= [2, 2, 2, 2, 2] 

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

ax.plot(dates, zaxisvalues1, lowerLimits, color = 'b') 
ax.plot(dates, zaxisvalues2, upperLimits, color = 'r') 

for i,j,k,h in zip(dates,zaxisvalues0,lows,highs): 
    ax.plot([i,i],[j,j],[k,h],color = 'g') 

ax.scatter(dates, zaxisvalues0, highs, color = 'g', marker = "o") 
ax.scatter(dates, zaxisvalues0, lows, color = 'y', marker = "^") 

matplotlib.pyplot.show() 

가 생산 :

enter image description here

+0

뛰어난! 고마워, 마크. 배열이나리스트의 시리즈가 아닌 개별적인 포인트를 마음대로 계획 할 수 있다는 것을 결코 깨닫지 못했습니다. 이제 선 대신 사각형을 그리려면 어떻게해야할까요? 나는 당신의 "for"루프에서 "ax.plot"을 "ax.bar"로 변경하려고 시도했지만, 대신에 왜곡 된 라인이 있습니다. 직사각형을 그리는 방법이 있습니까? 미리 감사드립니다. – Zambi

+3

@ Zambi에 오신 것을 환영합니다 Stackoverflow! 여분의 질문을하기보다는 새로운 질문을하는 것이 더 의미가 있습니다. – Hooked

+0

Zambi는 @Hooked가 말했듯이 새로운 질문을 열면 더 큰 커뮤니티에서 볼 수 있습니다. 그러나 두 가지 옵션이 있습니다. 사각형의 4면을 "플롯"선으로 그리거나 PolyCollection (http://matplotlib.sourceforge.net/examples/mplot3d/polys3d_demo.html)을 사용하여 살펴보십시오. – Mark