2011-01-26 11 views
110

मैं भूखंड बनाने के लिए matplotlib का उपयोग कर रहा हूं। मुझे प्रत्येक प्लॉट को एक अलग रंग के साथ पहचानना है जिसे पाइथन द्वारा स्वचालित रूप से जेनरेट किया जाना चाहिए।एक ही आकृति में विभिन्न भूखंडों के लिए अलग-अलग रंगीन रेखाएं कैसे प्राप्त करें?

क्या आप मुझे एक ही आंकड़े में विभिन्न भूखंडों के लिए अलग-अलग रंग डालने का तरीका दे सकते हैं?

उत्तर

263

Matplotlib डिफ़ॉल्ट रूप से ऐसा करता है।

उदाहरण के लिए:

import matplotlib.pyplot as plt 
import numpy as np 

x = np.arange(10) 

plt.plot(x, x) 
plt.plot(x, 2 * x) 
plt.plot(x, 3 * x) 
plt.plot(x, 4 * x) 
plt.show() 

Basic plot demonstrating color cycling

और, जैसा कि आप पहले से ही पता हो सकता है, आप आसानी से एक पौराणिक कथा जोड़ सकते हैं:

import matplotlib.pyplot as plt 
import numpy as np 

x = np.arange(10) 

plt.plot(x, x) 
plt.plot(x, 2 * x) 
plt.plot(x, 3 * x) 
plt.plot(x, 4 * x) 

plt.legend(['y = x', 'y = 2x', 'y = 3x', 'y = 4x'], loc='upper left') 

plt.show() 

Basic plot with legend

आप नियंत्रित करना चाहते हैं रंग जो चक्रवात के माध्यम से चले जाएंगे:

import matplotlib.pyplot as plt 
import numpy as np 

x = np.arange(10) 

plt.gca().set_color_cycle(['red', 'green', 'blue', 'yellow']) 

plt.plot(x, x) 
plt.plot(x, 2 * x) 
plt.plot(x, 3 * x) 
plt.plot(x, 4 * x) 

plt.legend(['y = x', 'y = 2x', 'y = 3x', 'y = 4x'], loc='upper left') 

plt.show() 

Plot showing control over default color cycling

आशा है कि एक सा मदद करता है! यदि आप matplotlib से अपरिचित हैं, the tutorial is a good place to start

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

सबसे पहले, आप एक बहुत कुछ है, तो (> 5) चीजों में से आप एक आंकड़ा पर प्लॉट करने के लिए चाहते हैं, या तो:

  1. (अलग भूखंडों पर डाल उपयोग करने पर विचार एक आकृति पर कुछ सबप्लॉट), या
  2. उनके बीच अंतर करने के लिए रंग (यानी मार्कर शैलियों या रेखा मोटाई) के अलावा कुछ और उपयोग करें।

अन्यथा, आप एक बहुत गंदा साजिश के साथ हवा के लिए जा रहे हैं! जो कुछ भी आप कर रहे हैं उसे पढ़ने के लिए कभी भी अच्छा रहें और 15 अलग-अलग चीजों को एक आंकड़े पर क्रैक करने की कोशिश न करें !!

इसके अलावा, कई लोग अलग-अलग डिग्री के लिए रंगीन होते हैं, और कई अलग-अलग रंगों के बीच अंतर करना अधिक लोगों के लिए मुश्किल हो सकता है।

कहा गया है कि, अगर तुम सच में 20 अपेक्षाकृत अलग रंग के साथ एक धुरी पर 20 लाइनों रखना चाहते हैं, यहाँ एक तरह से यह करना है:

import matplotlib.pyplot as plt 
import numpy as np 

num_plots = 20 

# Have a look at the colormaps here and decide which one you'd like: 
# http://matplotlib.org/1.2.1/examples/pylab_examples/show_colormaps.html 
colormap = plt.cm.gist_ncar 
plt.gca().set_color_cycle([colormap(i) for i in np.linspace(0, 0.9, num_plots)]) 

# Plot several different functions... 
x = np.arange(10) 
labels = [] 
for i in range(1, num_plots + 1): 
    plt.plot(x, i * x + 5 * i) 
    labels.append(r'$y = %ix + %i$' % (i, 5*i)) 

# I'm basically just demonstrating several different legend options here... 
plt.legend(labels, ncol=4, loc='upper center', 
      bbox_to_anchor=[0.5, 1.1], 
      columnspacing=1.0, labelspacing=0.0, 
      handletextpad=0.0, handlelength=1.5, 
      fancybox=True, shadow=True) 

plt.show() 

Unique colors for 20 lines based on a given colormap

+2

ध्यान दें, matplotlib के नए संस्करण में, 'set_color_cycle' को बहिष्कृत कर दिया गया है, इसलिए लाइन 'plt.gca()। set_prop_cycle (plt.cycler (' color ', plt.cm.jet (np.linspace (0, 1, num_plots)) होना चाहिए) और अपनी आवश्यकताओं के अनुरूप बस 'plt.cm.YOUR_PREFERED_COLOR_MAP' को बदलें। – Nate

+0

@ जोकिंगटन: स्पष्टीकरण अद्भुत था, बहुत बहुत धन्यवाद – Breeze

2

मैं पेशकश करने के लिए चाहते हैं पिछले पोस्ट में दिए गए अंतिम लूप उत्तर पर एक मामूली सुधार (वह पोस्ट सही है और अभी भी स्वीकार किया जाना चाहिए)। आखिरी उदाहरण लेबल करते समय अंतर्निहित धारणा यह है कि plt.label(LIST)LIST में लेबल संख्या एक्स को Xth समय plot से संबंधित पंक्ति के साथ रखा गया था। मैंने पहले इस दृष्टिकोण के साथ समस्याओं में भाग लिया है।किंवदंतियों के निर्माण और प्रति matplotlibs प्रलेखन उनके लेबल को अनुकूलित (http://matplotlib.org/users/legend_guide.html#adjusting-the-order-of-legend-item) एक सुझाया गया तरीका एक गर्म लग रहा है कि लेबल सटीक भूखंडों के साथ जाने आपको लगता है कि वे करते हैं करने के लिए है:

... 
# Plot several different functions... 
labels = [] 
plotHandles = [] 
for i in range(1, num_plots + 1): 
    x, = plt.plot(some x vector, some y vector) #need the ',' per ** below 
    plotHandles.append(x) 
    labels.append(some label) 
plt.legend(plotHandles, labels, 'upper left',ncol=1) 

**: Matplotlib Legends not working

+3

बस fyi: आप प्लॉट करने के लिए "लेबल" क्वारग का भी उपयोग कर सकते हैं और फिर किसी भी तर्क के बिना किंवदंती को कॉल कर सकते हैं। –

14

उन्हें बाद में स्थापना

आप भूखंडों आप प्लॉट करने के लिए आप रंग बदल सकते हैं जा रहे हैं एक बार आप उन्हें साजिश रची है साजिश .lines का उपयोग करने से सीधे संख्या पुन: प्राप्त करने की संख्या पता नहीं है, मैं इस समाधान का उपयोग करें:

कुछ यादृच्छिक डेटा

import matplotlib.pyplot as plt 
import numpy as np 

fig1 = plt.figure() 
ax1 = fig1.add_subplot(111) 


for i in range(1,15): 
    ax1.plot(np.array([1,5])*i,label=i) 

कोड का टुकड़ा है कि आप की जरूरत है:

colormap = plt.cm.gist_ncar #nipy_spectral, Set1,Paired 
colors = [colormap(i) for i in np.linspace(0, 1,len(ax1.lines))] 
for i,j in enumerate(ax1.lines): 
    j.set_color(colors[i]) 


ax1.legend(loc=2) 

परिणाम निम्नलिखित है: पिछले उदाहरण के लिए enter image description here

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