python - grafico - matplotlib color del diagrama de dispersión como función de la tercera variable
matplotlib cm (1)
Esto funciona para mí, usando 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()
Resultado:
Alternativamente, para n puntos, haga una matriz de valores de color RGB con forma (n, 3) y edgecolors
argumento de palabra clave 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()
Resultado:
Ese ejemplo obtiene los valores RGBA escalando los valores z
al rango [0,1] y llamando al mapa de plt.cm.coolwarm
con los valores escalados. Cuando se llama de esta manera, un mapa de color matplotlib devuelve una matriz de valores RGBA, con cada fila dando el color del valor de entrada correspondiente. Por ejemplo:
>>> 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. ]])
Me gustaría saber cómo hacer que los puntos de color de la función de dispersión de matplotlib sean una tercera variable.
Preguntas gnuplot linecolor variable en matplotlib? y el diagrama de dispersión de Matplotlib; el color en función de una tercera variable plantea consultas similares, sin embargo, las respuestas a esas preguntas no abordan mi problema: el uso de c=arraywhichspecifiespointcolour
el c=arraywhichspecifiespointcolour
en la función de dispersión solo establece el color de relleno, no el color de borde. Esto significa que el uso de c=arr...
falla al usar markersymbol=''+''
, por ejemplo (porque ese marcador no tiene relleno, solo bordes). Quiero que los puntos sean coloreados por una tercera variable de manera confiable, independientemente de qué símbolo se use.
¿Hay alguna manera de lograr esto con la función de dispersión de Matplotlib?