Anda dapat melakukan ini dengan kode di bawah ini, dan kode dalam pertanyaan Anda sebenarnya sangat dekat dengan apa yang Anda butuhkan, yang harus Anda lakukan adalah memanggil cmap
objek yang Anda miliki.
import matplotlib
cmap = matplotlib.cm.get_cmap('Spectral')
rgba = cmap(0.5)
print(rgba) # (0.99807766255210428, 0.99923106502084169, 0.74602077638401709, 1.0)
Untuk nilai di luar rentang [0,0, 1.0] itu akan mengembalikan warna di bawah dan di atas (masing-masing). Ini, secara default, adalah warna minimum dan maksimum dalam rentang (jadi 0,0 dan 1,0). Default ini dapat diubah dengan cmap.set_under()
dan cmap.set_over()
.
Untuk angka "khusus" seperti np.nan
dan np.inf
standarnya adalah menggunakan nilai 0,0, ini dapat diubah menggunakan cmap.set_bad()
mirip dengan di bawah dan di atas seperti di atas.
Akhirnya mungkin perlu bagi Anda untuk menormalkan data Anda sedemikian rupa sehingga sesuai dengan rentang [0.0, 1.0]
. Ini dapat dilakukan dengan menggunakan matplotlib.colors.Normalize
hanya seperti yang ditunjukkan pada contoh kecil di bawah ini di mana argumen vmin
dan vmax
menggambarkan angka apa yang harus dipetakan masing-masing 0,0 dan 1,0.
import matplotlib
norm = matplotlib.colors.Normalize(vmin=10.0, vmax=20.0)
print(norm(15.0)) # 0.5
Normaliser logaritmik ( matplotlib.colors.LogNorm ) juga tersedia untuk rentang data dengan rentang nilai yang besar.
(Terima kasih kepada Joe Kington dan tcaswell untuk saran tentang cara meningkatkan jawaban.)
cmap.set_under('red'); print cmap(0.0), cmap(-0.01)
set_bad
yang mendefinisikan untuk apa iircnp.nan
dannp.inf
iirc. Anda harus menyebutkanNormalize
metode di sini juga.module 'matplotlib' has no attribute 'cm'
, coba ganti dua baris pertama denganimport matplotlib.pyplot as plt; cmap = plt.cm.get_cmap('Spectral')
Untuk mendapatkan nilai integer rgba alih-alih nilai float, bisa kita lakukan
Jadi untuk menyederhanakan kode berdasarkan jawaban dari Ffisegydd, kodenya akan seperti ini:
sumber
Untuk membangun solusi dari Ffisegydd dan amaliammr , berikut adalah contoh di mana kami membuat representasi CSV untuk colormap khusus:
sumber
Untuk kelengkapan ini, ini adalah pilihan cmap yang saya temui sejauh ini:
sumber