डिफ़ॉल्ट लाइन रंग चक्र प्राप्त करें


95

मैंने देखा कि जब आप साजिश करते हैं कि पहली पंक्ति नीली है, तो हरी, फिर लाल, और इसी तरह।

क्या रंगों की इस सूची तक पहुंचने का कोई तरीका है? मैंने रंग चक्र को बदलने या पुनरावृत्ति तक पहुँचने के बारे में एक लाख पोस्ट देखे हैं, लेकिन यह नहीं कि कैसे केवल उन रंगों की सूची प्राप्त करें जो डिफ़ॉल्ट रूप से matplotlib चक्रों के माध्यम से प्राप्त करते हैं।

जवाबों:


118

Matplotlib संस्करणों> = 1.5 में, आप rcParamकॉल कर सकते हैं axes.prop_cycle:

print plt.rcParams['axes.prop_cycle'].by_key()['color']

# [u'#1f77b4', u'#ff7f0e', u'#2ca02c', u'#d62728', u'#9467bd', u'#8c564b', u'#e377c2', u'#7f7f7f', u'#bcbd22', u'#17becf']

या इसके समकक्ष python3:

print(plt.rcParams['axes.prop_cycle'].by_key()['color'])

संस्करणों <1.5 में, यह कहा जाता था color_cycle:

print plt.rcParams['axes.color_cycle']

# [u'b', u'g', u'r', u'c', u'm', u'y', u'k']

ध्यान दें कि डिफ़ॉल्ट रंग चक्र 2.0.0 संस्करण में बदल गया है http://matplotlib.org/users/dflt_style_changes.html#colors-in-default-property-cycle


3
धन्यवाद! थोड़ा सुधार: पहला वाला होना चाहिए:lines_colour_cycle = [p['color'] for p in plt.rcParams['axes.prop_cycle']]
पीटर

4
@Peter, हाँ, याplt.rcParams['axes.prop_cycle'].by_key()['color']
tmdavison

91

अक्सर, कहीं से भी डिफ़ॉल्ट रंग चक्र प्राप्त करने की आवश्यकता नहीं होती है, क्योंकि यह डिफ़ॉल्ट एक है, इसलिए इसका उपयोग करना पर्याप्त है।

import numpy as np
import matplotlib.pyplot as plt

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

t = np.arange(5)

for i in range(4):
    line, = ax.plot(t,i*(t+1), linestyle = '-')
    ax.plot(t,i*(t+1)+.3,color = line.get_color(), linestyle = ':')

plt.show()

यहाँ छवि विवरण दर्ज करें

यदि आप कुछ अलग करने के लिए डिफ़ॉल्ट रंग चक्र का उपयोग करना चाहते हैं, तो बेशक कई विकल्प हैं।

"tab10" कॉलोरामैप

पहले यह उल्लेख किया जाना चाहिए कि "tab10"colormap में डिफ़ॉल्ट रंग चक्र से रंग शामिल हैं, आप इसे प्राप्त कर सकते हैं cmap = plt.get_cmap("tab10")

इसके बाद के संस्करण के बराबर होगा

import numpy as np
import matplotlib.pyplot as plt

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

t = np.arange(5)
cmap = plt.get_cmap("tab10")
for i in range(4):
    ax.plot(t,i*(t+1),   color=cmap(i), linestyle = '-')
    ax.plot(t,i*(t+1)+.3,color=cmap(i), linestyle = ':')

plt.show()

रंग चक्र से रंग

तुम भी, सीधे रंग साइक्लर उपयोग कर सकते हैं cycle = plt.rcParams['axes.prop_cycle'].by_key()['color']। यह चक्र से रंगों के साथ सूची देता है, जिसे आप ओवररेट करने के लिए उपयोग कर सकते हैं।

import numpy as np
import matplotlib.pyplot as plt

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

t = np.arange(5)
cycle = plt.rcParams['axes.prop_cycle'].by_key()['color']

for i in range(4):
    ax.plot(t,i*(t+1),   color=cycle[i], linestyle = '-')
    ax.plot(t,i*(t+1)+.3,color=cycle[i], linestyle = ':')

plt.show()

CNनोटेशन

अंत में, CNसंकेतन Nरंग चक्र के वें रंग को प्राप्त करने की अनुमति देता है color="C{}".format(i)। हालांकि यह केवल पहले 10 रंगों के लिए काम करता है ( N in [0,1,...9])

import numpy as np
import matplotlib.pyplot as plt

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

t = np.arange(5)

for i in range(4):
    ax.plot(t,i*(t+1),   color="C{}".format(i), linestyle = '-')
    ax.plot(t,i*(t+1)+.3,color="C{}".format(i), linestyle = ':')

plt.show()

यहां प्रस्तुत सभी कोड एक ही भूखंड का उत्पादन करते हैं।


क्या किसी तरह के चक्र का उपयोग करना matplotlib को बताना संभव है? रंग सरणी पर पुनरावृति होने का मतलब है कि आपको एक पूर्ण चक्र का उपयोग करने के बाद सूचकांक 0 पर वापस जाने के लिए तर्क जोड़ना होगा।
मेहदी

@ मेहेड़ी ज़रूर, मेटप्लोटिब एक रंग चक्र का उपयोग करता है। यह प्रश्न इस चक्र के रंगों को प्राप्त करने के लिए कहता है।
इम्पोर्टेंसऑफबिंगएर्नेस्ट

5
मुझे लगता CNहै कि आपके उत्तर में नोटेशन अधिक महत्वपूर्ण होना चाहिए, मैं इसे लगभग याद कर रहा था। मुझे संदेह है कि अधिकांश उपयोग के मामले केवल पहले 10 रंगों तक पहुंचने में सक्षम होने के साथ खुश हैं, और 'C1'दोस्तों को पारित करना वैसे भी कम चक्र है, जो स्पष्ट रूप से प्रोप चक्र को हथियाने की तुलना में कम बॉयलरप्लेट है।
एंड्रास डीक

3

CN संकेतन पर दोबारा गौर किया गया

मैं Matplotlib के एक नए विकास को संबोधित करना चाहता हूं। पिछले उत्तर में हम पढ़ते हैं

अंत में, CNसंकेतन Nरंग चक्र के वें रंग को प्राप्त करने की अनुमति देता है color="C{}".format(i)। हालांकि यह केवल पहले 10 रंगों के लिए काम करता है ( N in [0,1,...9])

परंतु

import numpy as np 
import matplotlib.pyplot as plt 

t = np.linspace(0,6.28, 629)                                                      
for N in (1, 2): 
    C0N, C1N = 'C%d'%(N), 'C%d'%(N+10) 
    plt.plot(t, N*np.sin(t), c=C0N, ls='-',  label='c='+C0N) 
    plt.plot(t, N*np.cos(t), c=C1N, ls='--', label='c='+C1N) 
plt.legend() ; plt.grid() ; plt.show()                                           

देता है

यहाँ छवि विवरण दर्ज करें


2

यदि आप आरजीबी रंग पाने के लिए एक त्वरित लाइनर की तलाश कर रहे हैं जो कि मैटप्लोटलिब अपनी लाइनों के लिए उपयोग करता है, तो यह है:

>>> import matplotlib; print('\n'.join([str(matplotlib.colors.to_rgb(c)) for c in matplotlib.pyplot.rcParams['axes.prop_cycle'].by_key()['color']]))
(0.12156862745098039, 0.4666666666666667, 0.7058823529411765)
(1.0, 0.4980392156862745, 0.054901960784313725)
(0.17254901960784313, 0.6274509803921569, 0.17254901960784313)
(0.8392156862745098, 0.15294117647058825, 0.1568627450980392)
(0.5803921568627451, 0.403921568627451, 0.7411764705882353)
(0.5490196078431373, 0.33725490196078434, 0.29411764705882354)
(0.8901960784313725, 0.4666666666666667, 0.7607843137254902)
(0.4980392156862745, 0.4980392156862745, 0.4980392156862745)
(0.7372549019607844, 0.7411764705882353, 0.13333333333333333)
(0.09019607843137255, 0.7450980392156863, 0.8117647058823529)

या uint8 के लिए:

import matplotlib; print('\n'.join([str(tuple(int(round(v*255)) for v in matplotlib.colors.to_rgb(c))) for c in matplotlib.pyplot.rcParams['axes.prop_cycle'].by_key()['color']]))
(31, 119, 180)
(255, 127, 14)
(44, 160, 44)
(214, 39, 40)
(148, 103, 189)
(140, 86, 75)
(227, 119, 194)
(127, 127, 127)
(188, 189, 34)
(23, 190, 207)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.