Je voudrais savoir comment faire des points de couleur de la fonction de dispersion de matplotlib par une troisième variable.
Les questions variable gnuplot linecolor dans matplotlib? et Matplotlib scatterplot; couleur en fonction d'une troisième variable ont posé des questions similaires, cependant, les réponses à ces questions ne résolvent pas mon problème : l'utilisation de c=arraywhichspecifiespointcolour
dans la fonction scatter définit uniquement la couleur de remplissage, pas la couleur du bord. Cela signifie que l'utilisation de c=arr...
échoue lors de l'utilisation de markersymbol='+'
, par exemple (parce que ce marqueur n'a pas de remplissage, seulement des bords). Je veux que les points soient colorés par une troisième variable de manière fiable, quel que soit le symbole utilisé.
Existe-t-il un moyen d'y parvenir avec la fonction de diffusion de Matplotlib?
Cela fonctionne pour moi, en utilisant matplotlib 1.1:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(10)
y = np.sin(x)
plt.scatter(x, y, marker='+', s=150, linewidths=4, c=y, cmap=plt.cm.coolwarm)
plt.show()
Résultat:
Alternativement, pour n points, créez un tableau de valeurs de couleur RVB avec la forme (n, 3) et affectez-le à l'argument de mot clé edgecolors
de scatter()
:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 20, 100)
y = np.sin(x)
z = x + 20 * y
scaled_z = (z - z.min()) / z.ptp()
colors = plt.cm.coolwarm(scaled_z)
plt.scatter(x, y, marker='+', edgecolors=colors, s=150, linewidths=4)
plt.show()
Résultat:
Cet exemple obtient les valeurs RGBA en mettant à l'échelle les valeurs z
dans la plage [0,1] et en appelant la palette de couleurs plt.cm.coolwarm
Avec les valeurs mises à l'échelle. Lorsqu'elle est appelée de cette façon, une palette de couleurs matplotlib renvoie un tableau de valeurs RGBA, chaque ligne donnant la couleur de la valeur d'entrée correspondante. Par exemple:
>>> t = np.linspace(0, 1, 5)
>>> t
array([ 0. , 0.25, 0.5 , 0.75, 1. ])
>>> plt.cm.coolwarm(t)
array([[ 0.2298, 0.2987, 0.7537, 1. ],
[ 0.5543, 0.6901, 0.9955, 1. ],
[ 0.8674, 0.8644, 0.8626, 1. ],
[ 0.9567, 0.598 , 0.4773, 1. ],
[ 0.7057, 0.0156, 0.1502, 1. ]])