Obtenir les différentes couleurs à partir d'une carte de la couleur dans matplotlib
Si vous avez une Palette de couleurs à partir de
cmap = matplotlib.cm.get_cmap('Spectral')
comment pouvez-vous obtenir une couleur particulière en dehors de ça entre 0 et 1, où 0.0 est la première couleur de la carte et le 1.0 est la dernière couleur dans la carte?
Idéalement, j'aimerais être en mesure d'obtenir au moyen de la couleur dans la carte en faisant:
>>> do_some_magic(cmap, 0.5) # Return an RGBA tuplet
(0.1, 0.2, 0.3, 1.0)
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le faire avec le code ci-dessous, et le code dans votre question était en fait très proche de ce que vous avez besoin, tout ce que vous avez à faire est d'appeler le
cmap
objet que vous avez.Pour les valeurs hors de l'intervalle [0.0, 1.0] ce sera le retour de la vertu et de la couleur (respectivement). Ce, par défaut, est le minimum et le maximum de la couleur au sein de la gamme (donc 0.0 et 1.0). Cette valeur par défaut peut être changé avec
cmap.set_under()
etcmap_set_over()
.Pour "spéciale" des nombres tels que
np.nan
etnp.inf
la valeur par défaut est d'utiliser la valeur 0.0, cela peut être modifié à l'aide decmap.set_bad()
de même pour les dessous et au-dessus comme ci-dessus.Enfin, il peut être nécessaire pour vous de normaliser vos données tel qu'il est conforme à la gamme
[0.0, 1.0]
. Cela peut être fait en utilisantmatplotlib.couleurs.Normaliser
simplement, comme indiqué dans le petit exemple ci-dessous où les argumentsvmin
etvmax
décrire ce que les chiffres doivent être mappés à 0.0 et 1.0).Logarithmique normaliser (matplotlib.couleurs.LogNorm) est également disponible pour les plages de données avec une large gamme de valeurs.
(Grâce aux deux Joe Kingston Portant et tcaswell pour des suggestions sur la façon d'améliorer la réponse.)
cmap.set_under('red'); print cmap(0.0), cmap(-0.01)
set_bad
qui définissent ce qui en fait pournp.nan
etnp.inf
iirc. Vous devez mentionner leNormalize
méthodes ici.matplotlib.colors.Normalize
.module 'matplotlib' has no attribute 'cm'
, essayez de remplacer les deux premières lignes avecimport matplotlib.pyplot as plt; cmap = plt.cm.get_cmap('Spectral')
set_bad
?_call_(self, X, ...)
danshelp(cmap)
pour obtenir une explication: "Pour les chars, X doit être dans l'intervalle[0.0, 1.0]
pour retourner les valeurs RGBAX*100
pour cent le long de la ligne de Palette. Pour les entiers, X doit être dans l'intervalle[0, Colormap.N)
de retour RGBA valeurs de indexé à partir de la Palette de couleur avec indexX
."Afin d'obtenir rgba valeur entière au lieu de float valeur, nous pouvons faire
Afin de simplifier le code en fonction de réponse de Ffisegydd, le code devrait ressembler à ceci:
De construire sur les solutions de Ffisegydd et amaliammr, voici un exemple où nous faisons CSV représentation d'une palette de couleurs personnalisée:
L'exhaustivité de ces sont la cmap les choix que j'ai rencontré jusqu'à présent: