2012-12-11 32 views
10

के बजाय किंवदंती में रंग-कोडित टेक्स्ट कुछ एलसीडी मॉनीटर पर, पौराणिक कथाओं में क्षैतिज रेखाओं का रंग अलग-अलग बताना मुश्किल है। (संलग्न छवि देखें)। तो पौराणिक कथाओं में एक रेखा खींचने के बजाय, क्या पाठ को केवल रंग कोड करना संभव है? अत: अन्य शब्द, नीले, "y = 1x" हरे रंग में, आदि में "y = 0x" है ...Matplotlib: रेखा

import matplotlib.pyplot as plt 
import numpy as np 

x = np.arange(10) 

fig = plt.figure() 
ax = plt.subplot(111) 

for i in xrange(5): 
    ax.plot(x, i * x, label='$y = %ix$' % i) 

ax.legend() 

plt.show() 

enter image description here

पी एस। अगर रेखा सिर्फ पौराणिक कथाओं में मोटा हो सकता है, लेकिन साजिश में नहीं, यह भी काम करेगा।

उत्तर

7

बस सेट कथा का linewidth संभालता है:

In [55]: fig, ax = plt.subplots() 

In [56]: x = np.arange(10) 

In [57]: for i in xrange(5):      
    ....:  ax.plot(x, i * x, label='$y = %ix$' % i) 
    ....:  

In [58]: leg = ax.legend(loc='best') 

In [59]: for l in leg.legendHandles:    
    ....:  l.set_linewidth(10) 
    ....:  

legend_linewidth.png

15

मैं एक ही बात सोच रहा था। पौराणिक कथाओं में फ़ॉन्ट के रंग को बदलने के लिए मैं यहां आया हूं। मैं, इस विधि के साथ पूरी तरह से खुश नहीं हूँ, क्योंकि यह एक छोटे से अनाड़ी लगता है, लेकिन यह काम किया पाने के लिए लगता है [संपादित करें: एक बेहतर तरीका के लिए नीचे देखें]:

import matplotlib.pyplot as plt 
import numpy as np 

x = np.arange(10) 

fig = plt.figure() 
ax = plt.subplot(111) 

colors = [] 
for i in xrange(5): 
    line, = ax.plot(x, i * x, label='$y = %ix$' % i) 
    colors.append(plt.getp(line,'color')) 

leg = ax.legend() 

for color,text in zip(colors,leg.get_texts()): 
    text.set_color(color) 

plt.show() 

the colorful results

2016 संपादित करें:

वास्तव में, एक बेहतर तरीका है। आप किंवदंती में बस लाइनों पर फिर से चल सकते हैं, जो रंगों को ट्रैक रखने के लिए रंगों का ट्रैक रखने की आवश्यकता से बचाता है। बहुत कम गुंजाइश। अब, रेखा रंग बदलना मूल रूप से एक-लाइनर है (ठीक है, यह वास्तव में एक दो-लाइनर है)।

import matplotlib.pyplot as plt 
import numpy as np 

x = np.arange(10) 

fig = plt.figure() 
ax = plt.subplot(111) 

for i in xrange(5): 
    ax.plot(x, i*x, label='$y = %ix$'%i) 

leg = ax.legend() 

# change the font colors to match the line colors: 
for line,text in zip(leg.get_lines(), leg.get_texts()): 
    text.set_color(line.get_color()) 

plt.show() 

2017 संपादित करें:: यदि आप वास्तव में रंग कोडित पाठ बजाय एक पंक्ति का चाहते हैं (जैसा कि शीर्षक से पता चलता) कर अन्त में, है, तो आप कथा में लाइनों को दबाने कर सकते हैं यहाँ पूरा उदाहरण है का उपयोग करके

leg = ax.legend(handlelength=0) 
6

इस आपरेशन सफाई से किया जा सकता है के बाद सभी अंकन कथा पाठ getters/setters और अक्ष रेखा getters/setters के माध्यम से किया जाता है। साजिश से पहले लूप के लिए लाइन रंगों के समान होने के लिए किंवदंती टेक्स्ट रंगों को सेट करें।

import matplotlib.pyplot as plt 
import numpy as np 

x = np.arange(10) 

fig = plt.figure() 
ax = plt.subplot(111) 

for i in xrange(5): 
    ax.plot(x, i * x, label='$y = %ix$' % i) 

leg = ax.legend() 

def color_legend_texts(leg): 
    """Color legend texts based on color of corresponding lines""" 
    for line, txt in zip(leg.get_lines(), leg.get_texts()): 
     txt.set_color(line.get_color()) 

color_legend_texts(leg)  

plt.show() 

मुख्य अंतर यह उत्तर में ध्यान दें कि साजिश स्वरूपण पूरी तरह से अंकन आपरेशन से decoupled किया जा सकता है।