2011-12-07 11 views
98

पर व्यक्तिगत बिंदुओं के लिए मार्कर सेट करें मैंने एक आकृति पर प्लॉट लाइनों के लिए matplotlib का उपयोग किया है। अब मैं लाइन पर अलग-अलग बिंदुओं के लिए स्टाइल, विशेष रूप से मार्कर सेट करना चाहता हूं। मैं यह कैसे करु?matplotlib: लाइन

संपादित करें: मेरे प्रश्न को स्पष्ट करने के लिए, जिसका उत्तर दिया गया था, मैं लाइन पर व्यक्तिगत मार्करों के लिए शैली सेट करने में सक्षम होना चाहता हूं, न कि लाइन पर प्रत्येक मार्कर।

+2

संबंधित समाधान: http://stackoverflow.com/questions/17406758/plotting-a-curve-with-equidistant-arc-length-markers –

उत्तर

178

plot पर आपके कॉल में कीवर्ड तर्क linestyle और/या निर्दिष्ट करें।

उदाहरण के लिए, एक चित्तीदार लाइन और नीले वृत्त मार्कर का उपयोग:

plt.plot(range(10), linestyle='--', marker='o', color='b') 

एक ही बात के लिए एक शॉर्टकट कॉल:

plt.plot(range(10), '--bo') 

example1

यहाँ संभव की एक सूची है लाइन और मार्कर शैलियों:

================ =============================== 
character   description 
================ =============================== 
    -    solid line style 
    --    dashed line style 
    -.    dash-dot line style 
    :    dotted line style 
    .    point marker 
    ,    pixel marker 
    o    circle marker 
    v    triangle_down marker 
^    triangle_up marker 
    <    triangle_left marker 
    >    triangle_right marker 
    1    tri_down marker 
    2    tri_up marker 
    3    tri_left marker 
    4    tri_right marker 
    s    square marker 
    p    pentagon marker 
    *    star marker 
    h    hexagon1 marker 
    H    hexagon2 marker 
    +    plus marker 
    x    x marker 
    D    diamond marker 
    d    thin_diamond marker 
    |    vline marker 
    _    hline marker 
================ =============================== 

संपादित करें:, अंक की एक मनमाना सबसेट रूप में चिह्नित करते टिप्पणियों में अनुरोध का एक उदाहरण के साथ:

import numpy as np 
import matplotlib.pyplot as plt 

xs = np.linspace(-np.pi, np.pi, 30) 
ys = np.sin(xs) 
markers_on = [12, 17, 18, 19] 
plt.plot(xs, ys, '-gD', markevery=markers_on) 
plt.show() 

example2

markevery kwarg का उपयोग कर यह पिछले उदाहरण के बाद से में संभव है 1.4+, this feature branch के विलय के कारण। यदि आप matplotlib के पुराने संस्करण पर फंस गए हैं, तो भी आप लाइन प्लॉट पर स्कैटरप्लॉट को ओवरले करके परिणाम प्राप्त कर सकते हैं। अधिक जानकारी के लिए edit history देखें।

+2

मुझे पता है वह भाग। मैं जो करना चाहता हूं वह केवल कुछ बिंदुओं को चिह्नित करता है। उदाहरण के लिए, उदाहरण के लिए, मैं केवल दूसरे और तीसरे बिंदुओं पर मार्कर कैसे लगाऊंगा? क्षमा करें अगर मेरा प्रश्न इस पहलू पर पर्याप्त स्पष्ट नहीं था। – dbmikus

+4

आप शैली '-' के साथ एक बार साजिश को कॉल कर सकते हैं, और फिर आप स्टाइल 'ओ' के साथ बिंदुओं के सबसेट पर प्लॉट को फिर से कॉल कर सकते हैं। – wim

+0

क्या मैं सिर्फ साजिश के लिए आपूर्ति किए गए मूल्यों पर पुन: प्रयास करूंगा और केवल मार्करों के साथ एक डिस्कनेक्ट डॉट सबप्लॉट बना दूंगा? और फिर उन्हें पिछली पंक्ति के शीर्ष पर रखा जाएगा? या क्या ऐसा करने का एक क्लीनर तरीका है? मैं इसे ठीक तरह से कर रहा हूं, लेकिन मैं इसे सबसे स्वीकार्य तरीके से कोड करना चाहता हूं। – dbmikus

11

भविष्य में संदर्भ के लिए - Line2D कलाकार plot() द्वारा वापस भी एक set_markevery() विधि है जो आप केवल कुछ बिंदुओं पर मार्कर सेट करने के लिए अनुमति देता है - देखना https://matplotlib.org/api/_as_gen/matplotlib.lines.Line2D.html#matplotlib.lines.Line2D.set_markevery

+2

सच है, लेकिन मनमाने ढंग से बिंदुओं पर नहीं - इसे शुरू करना होगा: रोकें: मुझे लगता है कि चरणबद्ध प्रकार के सबसेट्स .. – wim

+0

मेरी धारणा यह है कि उपरोक्त दोनों पदों का उत्तर प्रश्न का उत्तर देता है। कारण यह है कि वे दो अलग-अलग मुद्दों को संबोधित करते हैं। "मार्कर" शब्द आमतौर पर वक्र की शैली को संदर्भित करता है। तो एक नियमित नियम (उदाहरण के लिए हर 10) निहित है। यदि आप अंक के कुछ "मनमाना" सबसेट को बाहर करना चाहते हैं, तो कृपया इसे एक वक्र के रूप में देखें, मूल वक्र पर मार्कर के रूप में नहीं। यह सिर्फ एक अलग वक्र है जो मार्कर होने के लिए होता है। तो आपको उम्मीद है कि मैन्युअल रूप से अंक चुनना होगा। यह विषय दिलचस्प है और गहरा हो गया है, प्रासंगिक कोड जारी करने के बाद, भविष्य के पोस्ट में और अधिक टिप्पणी करेगा। –

+1

@wim एक पीआर है जो उम्मीद है कि इसे 1.4 में बना देगा जो आपको मनमानी अंक https://github.com/matplotlib/matplotlib/pull/2662 – tacaswell

9

एक तस्वीर दिखाने के लिए सभी मार्करों 'का नाम और विवरण, मैं आशा नहीं है यह तुम्हे मदद करेगा।

import matplotlib.pylab as plt 
markers=['.',',','o','v','^','<','>','1','2','3','4','8','s','p','P','*','h','H','+','x','X','D','d','|','_'] 
descriptions=['point', 'pixel', 'circle', 'triangle_down', 'triangle_up','triangle_left', 'triangle_right', 'tri_down', 'tri_up', 'tri_left','tri_right', 'octagon', 'square', 'pentagon', 'plus (filled)','star', 'hexagon1', 'hexagon2', 'plus', 'x', 'x (filled)','diamond', 'thin_diamond', 'vline', 'hline'] 
x=[] 
y=[] 
for i in range(5): 
    for j in range(5): 
     x.append(i) 
     y.append(j) 
plt.figure() 
for i,j,m,l in zip(x,y,markers,descriptions): 
    plt.scatter(i,j,marker=m) 
    plt.text(i-0.15,j+0.15,s=m+' : '+l) 
plt.axis([-0.1,4.8,-0.1,4.5]) 
plt.tight_layout() 
plt.axis('off') 
plt.show() 

example1 Click here to see picture

arclength मार्कर रिक्ति के लिए