Créer propre palette de couleurs à l'aide de matplotlib et de l'intrigue échelle de couleurs
J'ai le problème suivant, j'ai envie de créer ma propre palette de couleurs (rouge-mix-violet-mix-blue) qui renvoie à des valeurs comprises entre -2 et +2 et souhaitez l'utiliser pour la couleur des points dans ma parcelle.
L'intrigue devrait alors avoir l'colorscale vers la droite.
C'est la façon dont j'ai créé la carte la mesure. Mais je ne suis pas vraiment sûr si il mélange les couleurs.
cmap = matplotlib.colors.ListedColormap(["red","violet","blue"], name='from_list', N=None)
m = cm.ScalarMappable(norm=norm, cmap=cmap)
De cette façon, je carte les couleurs pour les valeurs.
colors = itertools.cycle([m.to_rgba(1.22), ..])
Puis-je tracer:
for i in range(0, len(array_dg)):
plt.plot(array_dg[i], markers.next(),alpha=alpha[i], c=colors.next())
Mes problèmes sont les suivants:
1. Je ne peux pas le tracé de l'échelle de couleurs.
2. Je ne suis pas complètement sûr si ma balance est la création d'un continue (lisse) colorscale.
- Pourriez-vous préciser votre question un peu? Par exemple,
c=
spécifie la couleur de la ligne, alors que vous parlez des points. Vous pouvez spécifier un seulmarkerfacecolor
, scatter peut être une meilleure option si vous voulez vraiment des points. Et en effetListedColormap
est répertorié, n'est pas continu, voirLinearSegmentedColormap
. - Ce qui est étrange, c'est censé être des points et il semble que les points.
- Vous pouvez, bien sûr, mais c'est ce que vous devriez préciser. Nous ne pouvons pas voir ce que les styles de tracé que vous utilisez. Si vous utilisez
plt.plot(values, 'o')
, vous ne tracer que des marqueurs et pas de ligne, mais les marqueurs ont une couleur fixe qui ne marche pas (et ne peux pas) varient en fonction de la valeur.
Vous devez vous connecter pour publier un commentaire.
Il est un exemple illustratif de la apprendre à créer des colormaps ici.
La docstring est essentiel pour comprendre le sens de
cdict
. Une fois que vous obtenir ce sous votre ceinture, vous pouvez utiliser uncdict
comme ceci:Bien que le
cdict
format vous donne beaucoup de flexibilité, je trouve que pour de simplesles gradients de son format est assez peu intuitive. Voici une fonction d'utilité à l'aide
de générer de simples LinearSegmentedColormaps:
Par le chemin, la
for-loop
parcelles d'un point pour chaque appel à
plt.plot
. Cela fonctionne pour un petit nombre de points, mais devient très lente pour de nombreux points.plt.plot
ne peut tirer qu'en une seule couleur, maisplt.scatter
pouvez attribuer une couleur différente à chaque point. Ainsi,plt.scatter
est le chemin à parcourir.plt.scatter
(ouplt.plot
) une fois pour chaque couleur du marqueur ou de la combinaison.plt.register_cmap(name=rvb.name, cmap=rvb)
et ensuite appelerplt.set_cmap(rvb)
.x
ày
. J'étais auparavant à l'aide decolor = plt.cm.cool(x/y
) etax.scatter(x,y,c=colors)
plt.cm.cool
. De sorte qu'ils sont fongibles:color = rvb(x/y)
.Étant donné que les méthodes utilisées dans d'autres réponses semble assez compliqué pour une telle tâche facile, voici une nouvelle réponse:
Au lieu d'un
ListedColormap
, ce qui produit une palette de couleurs discrètes, vous pouvez utiliser unLinearSegmentedColormap
. Cela peut facilement être créé à partir d'une liste à l'aide de lafrom_list
méthode.Plus généralement, si vous avez une liste de valeurs (par exemple,
[-2., -1, 2]
) et les couleurs correspondantes (par ex.["red","violet","blue"]
), tels que len
ième valeur doit correspondre à lan
th de couleur, vous pouvez normaliser les valeurs et l'offre comme des n-uplets de lafrom_list
méthode.red
correspond à-5
,violet
à1
etblue
à100
? Je serais très heureux si vous pouviez regarder à la question que j'avais posée here.vmin
etvmax
ou lanorm
argument de chaque méthode de traçage..from_list
au lieu de partir d'un dictionnaire, veuillez m'en informer et je vais prouver que ce n'est pas vrai..from_list
méthode?.from_list
? A-t-elle à faire manuellement, ou est-il une option pour utilisation non-valeurs normalisées.Normalize
ou*Norm
instance en cours d'utilisation.(1.0, 0, 0, 0.5)
pour la moitié transparent rouge.Si vous souhaitez automatiser la création d'une coutume divergentes de la palette de couleurs utilisée couramment pour des parcelles de surface, ce module combiné avec @unutbu méthode a bien fonctionné pour moi.
Les valeurs haute et basse peut être soit la chaîne de caractères des noms de couleur rvb ou des n-uplets. C'est le résultat de l'utilisation de la surface de la parcelle de démonstration:
