Matplotlib melakukan ini secara default.
Misalnya:
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()
Dan, seperti yang mungkin sudah Anda ketahui, Anda dapat dengan mudah menambahkan legenda:
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()
Jika Anda ingin mengontrol warna yang akan didaur ulang:
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()
Jika Anda tidak terbiasa dengan matplotlib, tutorialnya adalah tempat yang baik untuk memulai .
Edit:
Pertama, jika Anda memiliki banyak (> 5) hal yang ingin Anda plot pada satu gambar, baik:
- Letakkan di plot yang berbeda (pertimbangkan untuk menggunakan beberapa sub plot pada satu gambar), atau
- Gunakan sesuatu selain warna (yaitu gaya marker atau ketebalan garis) untuk membedakannya.
Kalau tidak, Anda akan berakhir dengan plot yang sangat berantakan! Bersikaplah baik kepada siapa pun yang akan membaca apa pun yang Anda lakukan dan jangan mencoba menjejalkan 15 hal berbeda ke dalam satu angka !!
Selain itu, banyak orang yang buta warna sampai tingkat yang berbeda-beda, dan membedakan antara banyak warna yang agak berbeda sulit bagi lebih banyak orang daripada yang Anda sadari.
Yang telah dikatakan, jika Anda benar-benar ingin menempatkan 20 garis pada satu sumbu dengan 20 warna yang relatif berbeda, inilah salah satu cara untuk melakukannya:
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()
set_color_cycle
telah usang, sehingga baris seharusnyaplt.gca().set_prop_cycle(plt.cycler('color', plt.cm.jet(np.linspace(0, 1, num_plots))))
dan hanya mengubahplt.cm.YOUR_PREFERED_COLOR_MAP
sesuai dengan kebutuhan Anda.axes
) dan bertanya tentang memvariasikan warna garis tunggal dalam plot yang berbeda (berbedaaxes
) ... Yang mengatakan, jawaban yang sangat baik untuk yang penting pertanyaan (mungkin berbeda dari apa yang ditanyakan OP, tetapi tidak ada yang tahu karena mereka mengajukan satu pertanyaan ini dan menghilang!) - +1Pengaturan mereka nanti
Jika Anda tidak tahu jumlah plot yang akan Anda plot, Anda dapat mengubah warna setelah Anda memplotnya mengambil nomor langsung dari plot menggunakan
.lines
, saya menggunakan solusi ini:Beberapa data acak
Potongan kode yang Anda butuhkan:
Hasilnya adalah sebagai berikut:
sumber
TL; DR Tidak, itu tidak dapat dilakukan secara otomatis . Ya itu mungkin.
Setiap plot (
axes
) dalam gambar (figure
) memiliki siklus warna sendiri - jika Anda tidak memaksakan warna yang berbeda untuk setiap plot, semua plot berbagi urutan warna yang sama, tetapi, jika kita merentangkan sedikit arti "otomatis" , itu bisa dilakukan.OP menulis
Tapi ... Matplotlib secara otomatis menghasilkan warna yang berbeda untuk setiap kurva yang berbeda
Jadi mengapa permintaan OP? Jika kita terus membaca, sudah
dan itu masuk akal, karena masing-masing plot (masing-masing
axes
dalam bahasa Matplotlib) memiliki sendiricolor_cycle
(atau lebih tepatnya, pada 2018, yangprop_cycle
) dan masing-masing plot (axes
) menggunakan kembali warna yang sama dalam urutan yang sama.Jika ini adalah arti dari pertanyaan awal, satu kemungkinan adalah secara eksplisit memberi nama warna yang berbeda untuk setiap plot.
Jika plot (seperti yang sering terjadi) dihasilkan dalam satu loop, kita harus memiliki variabel loop tambahan untuk mengganti warna yang dipilih secara otomatis oleh Matplotlib.
Kemungkinan lain adalah untuk instantiate objek pengendara sepeda
Perhatikan bahwa
type(my_cycler)
adalahcycler.Cycler
tetapitype(actual_cycler)
adalahitertools.cycle
.sumber
Saya ingin menawarkan sedikit perbaikan pada jawaban loop terakhir yang diberikan pada posting sebelumnya (postingan itu benar dan masih harus diterima). Asumsi implisit yang dibuat ketika memberi label pada contoh terakhir adalah bahwa
plt.label(LIST)
menempatkan label nomor XLIST
dengan garis yang sesuai dengan waktu Xplot
disebut. Saya pernah mengalami masalah dengan pendekatan ini sebelumnya. Cara yang disarankan untuk membuat legenda dan menyesuaikan label mereka per dokumentasi matplotlibs ( http://matplotlib.org/users/legend_guide.html#adjusting-the-order-of-legend-item ) adalah memiliki perasaan hangat bahwa label tersebut pergi bersama dengan plot persis yang Anda pikir mereka lakukan:**: Matplotlib Legends tidak berfungsi
sumber