2012-05-13 26 views
12

以下のコードでは、2つのコード行で作成された散布図の各ペアを結ぶ線を作成します(緑の円と黄色の矢頭を結びつける方法) .show()命令の直前の終了?Pythonとmatplotlibで3D散布図の2点を結ぶ

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

ザンビは、@Hookedが言ったように、新しいコミュニティを開くことができるように新しい質問を開くのが最善だと言った。しかし、あなたは2つの選択肢があります。四角形の4辺を "plot"線で描画するか、PolyCollection(http://matplotlib.sourceforge.net/examples/mplot3d/polys3d_demo.html)を使って調べてください。 – Mark