2012-05-13 18 views
12

नीचे दिए गए कोड में, मैं कोड की दो पंक्तियों द्वारा बनाई गई स्कैटर प्लॉट्स (यानी हरे रंग के चक्र को पीले तीरहेड से जोड़ना) जोड़ने वाली रेखाएं कैसे बना सकता हूं .show() निर्देश से पहले अंत?पायथन और matplotlib में 3 डी स्कैटर प्लॉट में दो बिंदुओं को जोड़ना

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.barot" में बदलने का प्रयास किया लेकिन मुझे इसके बजाय लाइनों को स्कूड किया गया। क्या आयत खींचने का कोई तरीका है? अग्रिम में धन्यवाद। – Zambi

+3

@Zambi Stackoverflow में आपका स्वागत है! अतिरिक्त प्रश्नों पर ध्यान देने की बजाय, यह _new_ प्रश्न पूछने के लिए यहां अधिक समझ में आता है। – Hooked

+0

ज़ंबी, जैसा कि @ हुक ने कहा, एक नया प्रश्न खोलना सबसे अच्छा है ताकि बड़ा समुदाय इसे देख सके। एक त्वरित दिखने के बावजूद, आपके पास दो विकल्प हैं, आयत के 4 पक्षों को "साजिश" रेखाओं के साथ खींचें या पॉलीकोलेक्शन (http://matplotlib.sourceforge.net/examples/mplot3d/polys3d_demo.html) का उपयोग करने में देखें – Mark

संबंधित मुद्दे