जवाबों:
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()
और, जैसा कि आप पहले से ही जानते हैं, आप आसानी से एक किंवदंती जोड़ सकते हैं:
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()
यदि आप उन रंगों को नियंत्रित करना चाहते हैं, जिन्हें चक्रित किया जाएगा:
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()
यदि आप matplotlib से अपरिचित हैं, तो ट्यूटोरियल शुरू करने के लिए एक अच्छी जगह है ।
संपादित करें:
सबसे पहले, यदि आपके पास बहुत सारी (> 5) चीजें हैं, जिन्हें आप एक आंकड़े पर प्लॉट करना चाहते हैं:
अन्यथा, आप बहुत गंदे साजिश के साथ हवा जा रहे हैं ! जो कभी भी आप जो भी कर रहे हैं उसे पढ़ने के लिए अच्छा रहें और एक आकृति पर 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_prop_cycle(plt.cycler('color', plt.cm.jet(np.linspace(0, 1, 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()
axes
) अलग-अलग घटता है और एक ही पंक्ति के रंग को अलग-अलग भूखंडों (अलग-अलग axes
) में अलग-अलग करने के बारे में पूछते हैं ... उन्होंने कहा, एक महत्वपूर्ण उत्तर सवाल (संभवतः ओपी ने जो पूछा, उससे अलग, लेकिन कोई भी नहीं बता सकता क्योंकि उन्होंने यह एकल प्रश्न पूछा था और गायब हो गया था!) - +1
अगर आपको प्लॉट की संख्या नहीं पता है तो आप प्लॉट करने जा रहे हैं, आप रंग बदलने के बाद एक बार प्लॉट से सीधे नंबर प्राप्त कर सकते हैं .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)
TL; DR नहीं, यह स्वचालित रूप से नहीं किया जा सकता । हाँ यह संभव है।
import matplotlib.pyplot as plt
my_colors = plt.rcParams['axes.prop_cycle']() # <<< note that we CALL the prop_cycle
fig, axes = plt.subplots(2,3)
for ax in axes.flatten(): ax.plot((0,1), (0,1), **next(my_colors))
प्रत्येक प्लॉट ( axes
) एक आकृति में ( figure
) रंगों का अपना चक्र है - यदि आप प्रत्येक प्लॉट के लिए एक अलग रंग को बाध्य नहीं करते हैं, तो सभी प्लॉट रंगों के समान क्रम को साझा करते हैं लेकिन, अगर हम थोड़ा सा खींचते हैं तो "स्वचालित रूप से" का अर्थ है , यह किया जा सकता है।
ओपी ने लिखा
[...] मुझे प्रत्येक प्लॉट को एक अलग रंग के साथ पहचानना होगा जिसे स्वचालित रूप से [Matplotlib] द्वारा उत्पन्न किया जाना चाहिए।
लेकिन ... Matplotlib स्वचालित रूप से प्रत्येक अलग वक्र के लिए अलग-अलग रंग उत्पन्न करता है
In [10]: import numpy as np
...: import matplotlib.pyplot as plt
In [11]: plt.plot((0,1), (0,1), (1,2), (1,0));
Out[11]:
तो ओपी ने निवेदन क्यों किया? यदि हम पढ़ना जारी रखते हैं, तो हमारे पास है
क्या आप कृपया मुझे एक ही आकृति में विभिन्न भूखंडों के लिए अलग-अलग रंग डालने की विधि दे सकते हैं?
और यह समझ में आता है, क्योंकि प्रत्येक कथानक ( axes
माटप्लोटलिब के प्रतिमान में प्रत्येक ) का अपना color_cycle
(या बल्कि, 2018 में, उसका prop_cycle
) और प्रत्येक कथानक ( axes
) एक ही क्रम में समान रंगों का पुन: उपयोग करता है।
In [12]: fig, axes = plt.subplots(2,3)
In [13]: for ax in axes.flatten():
...: ax.plot((0,1), (0,1))
यदि यह मूल प्रश्न का अर्थ है, तो एक संभावना स्पष्ट रूप से प्रत्येक भूखंड के लिए एक अलग रंग का नाम है।
यदि प्लॉट्स (जैसा कि अक्सर होता है) एक लूप में उत्पन्न होता है, तो हमारे पास Matplotlib द्वारा चुने गए रंग को स्वचालित रूप से ओवरराइड करने के लिए एक अतिरिक्त लूप वेरिएबल होना चाहिए ।
In [14]: fig, axes = plt.subplots(2,3)
In [15]: for ax, short_color_name in zip(axes.flatten(), 'brgkyc'):
...: ax.plot((0,1), (0,1), short_color_name)
एक और संभावना है कि एक साइक्लर ऑब्जेक्ट को त्वरित किया जाए
from cycler import cycler
my_cycler = cycler('color', ['k', 'r']) * cycler('linewidth', [1., 1.5, 2.])
actual_cycler = my_cycler()
fig, axes = plt.subplots(2,3)
for ax in axes.flat:
ax.plot((0,1), (0,1), **next(actual_cycler))
ध्यान दें कि type(my_cycler)
है, cycler.Cycler
लेकिन type(actual_cycler)
है itertools.cycle
।
मैं पिछले पोस्ट में दिए गए अंतिम लूप उत्तर पर एक मामूली सुधार की पेशकश करना चाहूंगा (यह पोस्ट सही है और अभी भी स्वीकार किया जाना चाहिए)। अंतिम उदाहरण को लेबल करते समय की गई अंतर्निहित धारणा यह है कि plt.label(LIST)
लेबल नंबर X 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)
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
अपनी आवश्यकताओं के अनुरूप बदलें ।