Yanıtlar:
Matplotlib bunu varsayılan olarak yapar.
Örneğin:
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()
Ve bildiğiniz gibi, kolayca bir efsane ekleyebilirsiniz:
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()
Çevrilecek renkleri kontrol etmek istiyorsanız:
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'i bilmiyorsanız , öğretici başlamak için iyi bir yerdir .
Düzenle:
Öncelikle, bir figür üzerinde çizmek istediğiniz çok şey varsa (> 5), ya da:
Aksi takdirde, çok dağınık bir arsa ile dolacaksınız! Kim ne yaparsanız okuyacak kimseye iyi olun ve bir figür üzerine 15 farklı şeyi sıkıştırmaya çalışmayın !!
Bunun ötesinde, birçok insan değişen derecelerde renk körüdür ve çok sayıda farklı renk arasında ayrım yapmak fark edebileceğinizden daha fazla insan için zordur.
Bununla birlikte, 20 göreli olarak farklı renkle bir eksene gerçekten 20 satır koymak istiyorsanız, bunu yapmanın bir yolu var:
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
) uygun şekilde farklı eğrileri bildiğine ve farklı parsellerde (farklı axes
) tek bir çizginin rengini değiştirmesini istediğine ikna oldum ... soru (muhtemelen OP'nin sorduğundan farklıdır, ancak kimse bu tek soruyu sordukları ve kayboldukları için söyleyemez!) - +1
Eğer çizeceğiniz arazilerin sayısını bilmiyorsanız, onları kullanarak doğrudan çizimden numarayı alarak çizdikten sonra renkleri değiştirebilirsiniz, .lines
bu çözümü kullanıyorum:
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 Hayır, otomatik olarak yapılamaz . Evet mümkün.
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
Bir şekildeki ( figure
)
her çizimin ( ) kendi renk döngüsü vardır - her çizim için farklı bir rengi zorlamazsanız, tüm grafikler aynı renk sırasını paylaşır, ancak "otomatik" in ne anlama geldiğini biraz uzatırsak , yapılabilir.
OP yazdı
[...] Her grafiği, [Matplotlib] tarafından otomatik olarak oluşturulması gereken farklı bir renkle tanımlamam gerekiyor.
Ancak ... Matplotlib, her farklı eğri için otomatik olarak farklı renkler üretir
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]:
Peki neden OP talebi? Eğer okumaya devam edersek,
Bana aynı şekilde farklı araziler için farklı renkler koymak için bir yöntem verebilir misiniz?
ve bu mantıklıdır, çünkü her bir komplo (her axes
biri Matplotlib'in görüşünde) kendi color_cycle
(veya daha doğrusu, 2018'de prop_cycle
) ve her bir komplo ( axes
) aynı renkleri aynı sırayla kullanır.
In [12]: fig, axes = plt.subplots(2,3)
In [13]: for ax in axes.flatten():
...: ax.plot((0,1), (0,1))
Orijinal sorunun anlamı buysa, bir olasılık her arsa için açıkça farklı bir renk adlandırmaktır.
Grafikler (sık sık olduğu gibi) bir döngü içinde oluşturulursa, Matplotlib tarafından otomatik olarak seçilen rengi geçersiz kılmak için ek bir döngü değişkenine sahip olmalıyız.
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)
Başka bir olasılık, bir cycler nesnesini somutlaştırmaktır
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))
Not type(my_cycler)
olduğunu cycler.Cycler
ancak type(actual_cycler)
olduğunu itertools.cycle
.
Ben önceki yazı verilen son döngü cevap küçük bir gelişme sunmak istiyorum (bu yazı doğru ve hala kabul edilmelidir). Son örnek etiketlenirken yapılan zımni varsayım, plt.label(LIST)
X numaralı etikete LIST
, X'inci zamana karşılık gelen satırın plot
çağrılmasıdır. Daha önce bu yaklaşımla ilgili sorunlar yaşadım. Matplotlibs belgelerine göre efsaneler oluşturmanın ve etiketlerini özelleştirmenin önerilen yolu ( http://matplotlib.org/users/legend_guide.html#adjusting-the-order-of-legend-item ), etiketlerin iyi gittiğini hissetmek yaptıklarını düşündüğünüz kesin arazilerle birlikte:
...
# 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)
Matplot planınızı farklı renklerle renklendirir, ancak belirli renkleri koymak istediğinizde
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(10)
plt.plot(x, x)
plt.plot(x, 2 * x,color='blue')
plt.plot(x, 3 * x,color='red')
plt.plot(x, 4 * x,color='green')
plt.show()
set_color_cycle
kullanımdan kaldırılmıştır, bu nedenle bu satır olmalıplt.gca().set_prop_cycle(plt.cycler('color', plt.cm.jet(np.linspace(0, 1, num_plots))))
ve sadeceplt.cm.YOUR_PREFERED_COLOR_MAP
ihtiyaçlarınıza göre değiştirilmelidir.