matplotlib nuage de points Couleur en fonction de la troisième variable
je voudrais savoir comment rendre la fonction de dispersion de matplotlib des points de couleur par une troisième variable.
Questions
gnuplot linecolor variable in matplotlib? et matplotlib scatterplot; couleur en fonction d'une troisième variable
posé des questions similaires, cependant, les réponses à ces questions ne répondent pas à mon problème: l'utilisation de c=arraywhichspecifiespointcolour
dans la fonction de dispersion ne définit la couleur de remplissage, pas la couleur de 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 arêtes). Je veux que les points soient colorés par une troisième variable fiable, quel que soit le symbole utilisé.
y a-t-il un moyen d'y parvenir avec la fonction scatter de Matplotlib?
1 réponses
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 les points n, faites un tableau des valeurs de couleur RGB avec la forme (n, 3), et assignez-le au edgecolors
argument de mot-clé 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 z
à la gamme [0,1], et appelant le colormap plt.cm.coolwarm
avec les valeurs graduées. Lorsqu'il est appelé de cette façon, un colormap matplotlib retourne 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. ]])