रंग चक्र पुनरावृत्ति तक पहुँचना
अंतर्निहित पुनरावृत्ति तक पहुंचने के लिए कोई "उपयोगकर्ता-सामना" (उर्फ "सार्वजनिक") विधि नहीं है, लेकिन आप इसे "निजी" (सम्मेलन द्वारा) तरीकों से एक्सेस कर सकते हैं। हालाँकि, आप iterator
इसे बदले बिना राज्य नहीं प्राप्त कर सकते ।
रंग चक्र सेट करना
एक तरफ त्वरित: आप विभिन्न तरीकों से रंग / संपत्ति चक्र सेट कर सकते हैं (उदाहरण ax.set_color_cycle
के लिए संस्करण <1.5 या ax.set_prop_cycler
> = 1.5)। संस्करण 1.5 या अधिक , या पिछली शैली के लिए यहाँ उदाहरण देखें ।
अंतर्निहित पुनरावृत्ति तक पहुँचना
हालाँकि, जब चलने-फिरने के लिए कोई सार्वजनिक-सामना करने की कोई विधि नहीं है, तो आप इसे सहायक वर्ग के उदाहरण के ax
माध्यम से किसी दिए गए अक्ष ऑब्जेक्ट ( ) के लिए एक्सेस कर सकते हैं _get_lines
। ax._get_lines
एक स्पर्श को भ्रमित करने वाला नाम है, लेकिन यह सबसे पीछे की मशीनरी है जो plot
कमांड को सभी विषम और विविध तरीकों से संसाधित करने की अनुमति देता plot
है जिसे कहा जा सकता है। अन्य बातों के अलावा, यह वही है जो स्वचालित रूप से निर्दिष्ट करने के लिए किस रंग का ट्रैक रखता है। इसी तरह, ax._get_patches_for_fill
डिफ़ॉल्ट भरण रंगों और पैच गुणों के माध्यम से साइकिल चलाने को नियंत्रित करना है।
किसी भी दर पर, रंग चक्र चलने योग्य ax._get_lines.color_cycle
लाइनों के लिए और ax._get_patches_for_fill.color_cycle
पैच के लिए है। Matplotlib> = 1.5 पर, यह लाइब्रेरी का उपयोगcycler
करने के लिए बदल गया है , और चलने योग्य को prop_cycler
इसके बजाय कहा जाता है color_cycle
और dict
केवल एक रंग के बजाय गुणों की उपज देता है ।
सब सब में, आप कुछ ऐसा करेंगे:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
color_cycle = ax._get_lines.color_cycle
आप एक की स्थिति नहीं देख सकते हैं iterator
हालाँकि, यह ऑब्जेक्ट "नंगे" है iterator
। हम आसानी से अगला आइटम प्राप्त कर सकते हैं (उदाहरण के लिए next_color = next(color_cycle)
, लेकिन इसका मतलब है कि उसके बाद का अगला रंग वह है जो प्लॉट किया जाएगा। डिजाइन के अनुसार, इसे बदलने के बिना एक पुनरावृत्ति की वर्तमान स्थिति प्राप्त करने का कोई तरीका नहीं है।
में v1.5
या अधिक से अधिक, इसे पाने के लिए अच्छा होगा cycler
वस्तु है कि, प्रयोग के रूप में हम अपनी वर्तमान स्थिति का अनुमान लगा सकता है। हालाँकि, cycler
वस्तु कहीं भी (सार्वजनिक या निजी रूप से) सुलभ नहीं है। इसके बजाय, केवल ऑब्जेक्ट itertools.cycle
से बनाया गया उदाहरण cycler
पहुंच योग्य है। किसी भी तरह से, रंग / संपत्ति साइक्लर की अंतर्निहित स्थिति तक पहुंचने का कोई रास्ता नहीं है।
इसके बजाय पहले से प्लॉट किए गए आइटम के रंग से मेल खाएं
आपके मामले में, ऐसा लगता है कि आप किसी ऐसी चीज़ के रंग से मेल खाना चाहते हैं जो अभी प्लॉट की गई थी। यह निर्धारित करने की कोशिश करने के बजाय कि रंग / संपत्ति क्या होगी, आपके नए आइटम का रंग / आदि सेट करें जो प्लॉट किए गए गुणों के आधार पर।
उदाहरण के लिए, आपके द्वारा बताए गए मामले में, मैं ऐसा कुछ करूंगा:
import matplotlib.pyplot as plt
import numpy as np
def custom_plot(x, y, **kwargs):
ax = kwargs.pop('ax', plt.gca())
base_line, = ax.plot(x, y, **kwargs)
ax.fill_between(x, 0.9*y, 1.1*y, facecolor=base_line.get_color(), alpha=0.5)
x = np.linspace(0, 1, 10)
custom_plot(x, x)
custom_plot(x, 2*x)
custom_plot(x, -x, color='yellow', lw=3)
plt.show()
यह एकमात्र तरीका नहीं है, लेकिन इस मामले में, पहले से तैयार की गई रेखा का रंग प्राप्त करने की कोशिश करने की तुलना में इसका क्लीनर।