Możesz to zrobić za pomocą poniższego kodu, a kod w twoim pytaniu był w rzeczywistości bardzo zbliżony do tego, czego potrzebujesz, wszystko, co musisz zrobić, to wywołać cmap
obiekt, który masz.
import matplotlib
cmap = matplotlib.cm.get_cmap('Spectral')
rgba = cmap(0.5)
print(rgba) # (0.99807766255210428, 0.99923106502084169, 0.74602077638401709, 1.0)
W przypadku wartości spoza zakresu [0.0, 1.0] zwróci odpowiednio kolor pod i nad. Domyślnie jest to minimalny i maksymalny kolor w zakresie (czyli 0,0 i 1,0). To ustawienie domyślne można zmienić za pomocą cmap.set_under()
i cmap.set_over()
.
W przypadku liczb „specjalnych”, takich jak np.nan
i np.inf
domyślnie używana jest wartość 0,0, można to zmienić za pomocą cmap.set_bad()
podobnie jak poniżej i powyżej, jak powyżej.
Wreszcie może być konieczne znormalizowanie danych, aby były zgodne z zakresem [0.0, 1.0]
. Można to zrobić w matplotlib.colors.Normalize
prosty sposób, jak pokazano w małym przykładzie poniżej, w którym argumenty vmin
i vmax
opisują, jakie liczby powinny być odwzorowane odpowiednio na 0,0 i 1,0.
import matplotlib
norm = matplotlib.colors.Normalize(vmin=10.0, vmax=20.0)
print(norm(15.0)) # 0.5
Normalizator logarytmiczny ( matplotlib.colors.LogNorm ) jest również dostępny dla zakresów danych z dużym zakresem wartości.
(Dziękuję zarówno Joe Kingtonowi, jak i tcaswell za sugestie, jak poprawić odpowiedź.)
cmap.set_under('red'); print cmap(0.0), cmap(-0.01)
set_bad
które określają, co robi dlanp.nan
inp.inf
iirc. PowinieneśNormalize
tu również wspomnieć o metodach.module 'matplotlib' has no attribute 'cm'
, spróbuj zamienić pierwsze dwa wiersze naimport matplotlib.pyplot as plt; cmap = plt.cm.get_cmap('Spectral')
Aby uzyskać wartość całkowitą rgba zamiast wartości zmiennoprzecinkowej, możemy to zrobić
Tak więc, aby uprościć kod na podstawie odpowiedzi z Ffisegydd, kod wyglądałby tak:
źródło
Aby zbudować na rozwiązaniach Ffisegydd i amaliammr , oto przykład, w którym tworzymy reprezentację CSV dla niestandardowej mapy kolorów:
źródło
Dla kompletności są to wybory cmap, z którymi do tej pory spotkałem:
źródło