Você pode fazer isso com o código abaixo, e o código na sua pergunta estava realmente muito próximo do que você precisava, tudo o que você precisa fazer é chamar o cmap
objeto que você possui.
import matplotlib
cmap = matplotlib.cm.get_cmap('Spectral')
rgba = cmap(0.5)
print(rgba) # (0.99807766255210428, 0.99923106502084169, 0.74602077638401709, 1.0)
Para valores fora do intervalo [0,0, 1,0], ele retornará as cores abaixo e acima (respectivamente). Por padrão, essa é a cor mínima e máxima dentro do intervalo (portanto, 0,0 e 1,0). Este padrão pode ser alterado com cmap.set_under()
e cmap.set_over()
.
Para números "especiais" como, por exemplo, np.nan
e np.inf
o padrão é usar o valor 0,0, isso pode ser alterado usando-se da cmap.set_bad()
mesma forma que abaixo e acima como acima.
Por fim, pode ser necessário normalizar seus dados de forma que estejam em conformidade com o intervalo [0.0, 1.0]
. Isso pode ser feito usando matplotlib.colors.Normalize
simplesmente como mostrado no pequeno exemplo abaixo, onde os argumentos vmin
e vmax
descrevem quais números devem ser mapeados para 0,0 e 1,0, respectivamente.
import matplotlib
norm = matplotlib.colors.Normalize(vmin=10.0, vmax=20.0)
print(norm(15.0)) # 0.5
Um normalizador logarítmico ( matplotlib.colors.LogNorm ) também está disponível para intervalos de dados com um grande intervalo de valores.
(Agradecemos a Joe Kington e tcaswell por sugestões de como melhorar a resposta.)
cmap.set_under('red'); print cmap(0.0), cmap(-0.01)
set_bad
quem define o que faz paranp.nan
e onp.inf
iirc. Você deve mencionar osNormalize
métodos aqui também.module 'matplotlib' has no attribute 'cm'
, tente substituir as duas primeiras linhas comimport matplotlib.pyplot as plt; cmap = plt.cm.get_cmap('Spectral')
Para obter o valor inteiro rgba em vez do valor flutuante, podemos fazer
Portanto, para simplificar o código com base na resposta de Ffisegydd, o código seria assim:
fonte
Para desenvolver as soluções de Ffisegydd e amaliammr , aqui está um exemplo em que criamos representação CSV para um mapa de cores personalizado:
fonte
Para completar, estas são as opções de cmap que encontrei até agora:
fonte