Saya perhatikan ketika Anda memplot bahwa baris pertama berwarna biru, lalu hijau, lalu merah, dan seterusnya.
Adakah cara untuk mengakses daftar warna ini? Saya telah melihat jutaan posting tentang cara mengubah siklus warna atau mengakses iterator, tetapi tidak tentang cara mendapatkan daftar warna yang siklus matplotlib secara default.
matplotlib
Peter
sumber
sumber
lines_colour_cycle = [p['color'] for p in plt.rcParams['axes.prop_cycle']]
plt.rcParams['axes.prop_cycle'].by_key()['color']
Seringkali, tidak perlu mendapatkan siklus warna default dari mana saja, karena ini adalah siklus warna default, jadi cukup menggunakannya saja sudah cukup.
import numpy as np import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) t = np.arange(5) for i in range(4): line, = ax.plot(t,i*(t+1), linestyle = '-') ax.plot(t,i*(t+1)+.3,color = line.get_color(), linestyle = ':') plt.show()
Jika Anda ingin menggunakan siklus warna default untuk sesuatu yang berbeda, tentu saja ada beberapa pilihan.
peta warna "tab10"
Pertama-tama harus disebutkan bahwa peta
"tab10"
warna terdiri dari warna-warna dari siklus warna default, Anda bisa mendapatkannya melaluicmap = plt.get_cmap("tab10")
.Setara dengan hal di atas maka akan menjadi
import numpy as np import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) t = np.arange(5) cmap = plt.get_cmap("tab10") for i in range(4): ax.plot(t,i*(t+1), color=cmap(i), linestyle = '-') ax.plot(t,i*(t+1)+.3,color=cmap(i), linestyle = ':') plt.show()
Warna dari siklus warna
Anda juga dapat menggunakan color cycler secara langsung
cycle = plt.rcParams['axes.prop_cycle'].by_key()['color']
. Ini memberikan daftar dengan warna dari siklus, yang dapat Anda gunakan untuk mengulang.import numpy as np import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) t = np.arange(5) cycle = plt.rcParams['axes.prop_cycle'].by_key()['color'] for i in range(4): ax.plot(t,i*(t+1), color=cycle[i], linestyle = '-') ax.plot(t,i*(t+1)+.3,color=cycle[i], linestyle = ':') plt.show()
The
CN
notasiAkhirnya,
CN
notasi memungkinkan untuk mendapatkanN
warna siklus warnacolor="C{}".format(i)
,. Namun ini hanya berfungsi untuk 10 warna pertama (N in [0,1,...9]
)import numpy as np import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) t = np.arange(5) for i in range(4): ax.plot(t,i*(t+1), color="C{}".format(i), linestyle = '-') ax.plot(t,i*(t+1)+.3,color="C{}".format(i), linestyle = ':') plt.show()
Semua kode yang disajikan di sini menghasilkan plot yang sama.
sumber
CN
notasi harus jauh lebih menonjol dalam jawaban Anda, saya hampir melewatkannya. Saya menduga sebagian besar kasus penggunaan senang dengan hanya dapat mengakses 10 warna pertama, dan melewati'C1'
teman jauh lebih mudah daripada secara eksplisit mengambil siklus prop.Notasi CN ditinjau kembali
Saya ingin membahas perkembangan baru Matplotlib. Dalam jawaban sebelumnya kita membaca
tapi
import numpy as np import matplotlib.pyplot as plt t = np.linspace(0,6.28, 629) for N in (1, 2): C0N, C1N = 'C%d'%(N), 'C%d'%(N+10) plt.plot(t, N*np.sin(t), c=C0N, ls='-', label='c='+C0N) plt.plot(t, N*np.cos(t), c=C1N, ls='--', label='c='+C1N) plt.legend() ; plt.grid() ; plt.show()
memberi
sumber
jika Anda mencari one-liner cepat untuk mendapatkan warna RGB yang digunakan matplotlib untuk garisnya, ini dia:
>>> import matplotlib; print('\n'.join([str(matplotlib.colors.to_rgb(c)) for c in matplotlib.pyplot.rcParams['axes.prop_cycle'].by_key()['color']])) (0.12156862745098039, 0.4666666666666667, 0.7058823529411765) (1.0, 0.4980392156862745, 0.054901960784313725) (0.17254901960784313, 0.6274509803921569, 0.17254901960784313) (0.8392156862745098, 0.15294117647058825, 0.1568627450980392) (0.5803921568627451, 0.403921568627451, 0.7411764705882353) (0.5490196078431373, 0.33725490196078434, 0.29411764705882354) (0.8901960784313725, 0.4666666666666667, 0.7607843137254902) (0.4980392156862745, 0.4980392156862745, 0.4980392156862745) (0.7372549019607844, 0.7411764705882353, 0.13333333333333333) (0.09019607843137255, 0.7450980392156863, 0.8117647058823529)
Atau untuk uint8:
import matplotlib; print('\n'.join([str(tuple(int(round(v*255)) for v in matplotlib.colors.to_rgb(c))) for c in matplotlib.pyplot.rcParams['axes.prop_cycle'].by_key()['color']])) (31, 119, 180) (255, 127, 14) (44, 160, 44) (214, 39, 40) (148, 103, 189) (140, 86, 75) (227, 119, 194) (127, 127, 127) (188, 189, 34) (23, 190, 207)
sumber