रंग चक्र पुनरावृत्ति तक पहुँचना
अंतर्निहित पुनरावृत्ति तक पहुंचने के लिए कोई "उपयोगकर्ता-सामना" (उर्फ "सार्वजनिक") विधि नहीं है, लेकिन आप इसे "निजी" (सम्मेलन द्वारा) तरीकों से एक्सेस कर सकते हैं। हालाँकि, आप 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()

यह एकमात्र तरीका नहीं है, लेकिन इस मामले में, पहले से तैयार की गई रेखा का रंग प्राप्त करने की कोशिश करने की तुलना में इसका क्लीनर।