2017-06-28 4 views
6

Matplotlib में करने के लिए मेरी पसंदीदा चीजों में से एक है लाइन-प्लॉट का उत्पादन करने के लिए रंग-चक्र को सेट करना ताकि लाइनों में रंगों की अच्छी प्रगति हो। इस तरह:Matplotlib set_color_cycle बनाम set_prop_cycle

enter image description here

इससे पहले, इस set_color_cycle का उपयोग कर कोड की एक पंक्ति थी:

लेकिन, हाल ही में मैं एक चेतावनी दिखाई:

MatplotlibDeprecationWarning: 
The set_color_cycle attribute was deprecated in version 1.5. 
Use set_prop_cycle instead. 

set_prop_cycle का उपयोग करना, मैं एक ही परिणाम प्राप्त कर सकते हैं, लेकिन मुझे import cycler की आवश्यकता है, और वाक्यविन्यास कम कॉम्पैक्ट है:

from cycler import cycler 
colors = [plt.cm.spectral(i) for i in np.linspace(0, 1, num_lines)] 
ax.set_prop_cycle(cycler('color', colors)) 

तो, मेरे सवाल कर रहे हैं:

मैं set_prop_cycle सही ढंग से उपयोग कर रहा हूँ? (और सबसे कुशल तरीके से?)

क्या कलर-चक्र को रंगरूप में सेट करने का कोई आसान तरीका है? दूसरे शब्दों में, क्या इस तरह कुछ पौराणिक कार्य है?

ax.set_colorcycle_to_colormap('jet', nlines=30) 

यहाँ पूरा उदाहरण के लिए कोड है:

import numpy as np 
import matplotlib.pyplot as plt 

ax = plt.subplot(111) 
num_lines = 30 

colors = [plt.cm.spectral(i) for i in np.linspace(0, 1, num_lines)] 

# old way: 
ax.set_color_cycle(colors) 

# new way: 
from cycler import cycler 
ax.set_prop_cycle(cycler('color', colors)) 

for n in range(num_lines): 
    x = np.linspace(0,10,500) 
    y = np.sin(x)+n 
    ax.plot(x, y, lw=3) 

plt.show() 

उत्तर

4

नई संपत्ति साइक्लर सिर्फ रंग के अलावा अन्य गुण अधिक पुनरावृति कर सकते हैं क्योंकि (जैसे linestyle) आप, label निर्दिष्ट करने की आवश्यकता संपत्ति यानी जिस पर चक्र है।

ax.set_prop_cycle('color', colors) 

आयात और हालांकि एक साइक्लर बनाने के लिए कोई जरूरत नहीं है; इसलिए जब मैं इसे नई विधि का एकमात्र दोष देखता हूं, तो यह 8 अक्षरों को कॉल करता है।

कोई जादुई विधि है कि इनपुट के रूप में एक रंग मैप लेता है और साइक्लर बनाता है, लेकिन आप भी सीधे रंग मैप करने के लिए numpy सरणी की आपूर्ति करके अपने रंग सूची निर्माण छोटा कर सकते हैं।

colors = plt.cm.spectral(np.linspace(0,1,30)) 

या संयोजन

ax.set_prop_cycle('color',plt.cm.spectral(np.linspace(0,1,30))) 
+0

आह में है, इसलिए अब मैं बहुत आसानी से एक फायदा तरह प्रतीत होता है कि अलग अलग रंग, linewidths, linestyles, आदि की एक पूरी संयोजन निर्दिष्ट कर सकते हैं। और भुगतान करने का एकमात्र मूल्य 8 और वर्ण है - मैं इसके साथ रह सकता हूं :)। और कोलोमाप में लिन्स स्पेस पास करने के बारे में टिप के लिए धन्यवाद। अंत में, मुझे लगता है कि आपने मुझे कुछ पात्र बचाए हैं! – DanHickstein