Tengo los siguientes puntos de dispersión x, y con numpy

a = np.array([
[5.033,-3.066],
[5.454,-3.492],
[-1.971,0.384],
],)
x, y = a.T
plt.scatter(x, y)
plt.ylabel('Yv')
plt.show()

Y me gustaría dibujar puntos con color. Quiero decir, algo como esto:

a = np.array([
[5.033,-3.066] and color="black",
[5.454,-3.492] and color="black",
[-1.971,0.384] and color="red",
],)

¿Cómo puedo hacer eso? Veo un mapa de colores discutido aquí, pero no lo sé. si eso realmente se ajusta a mi necesidad.

2
mahmood 9 dic. 2020 a las 12:47

2 respuestas

La mejor respuesta

Añadiendo colores

Simplemente crea una lista de colores que corresponda a cada una de tus listas internas, luego dala al parámetro color del método de dispersión:

colors = ["black", "black", "red"]
plt.scatter(x, y, color=colors)

Resultado:

scatter plot with colored markers

Puede utilizar cadenas para especificar los colores que desee. Las cadenas de colores disponibles son todos nombres de colores HTML (en mayúsculas o minúsculas). Compruébelos todos aquí: colores HTML

También puede dar valores RGB hexadecimales como este (ejemplo para rosa):

'# FFB6C1'

... o como una tupla o lista de valores RGB que van de 0 a 1, así (todavía para rosa):

[1.0, 0.75, 0.8]

Fuente: Documentación de colores de Matplotlib

Añadiendo leyendas:

La forma más sencilla es dispersar iterativamente por fila:

a = np.array([
[5.033,-3.066],
[5.454,-3.492],
[-1.971,0.384],
],)
x, y = a.T

# Creating colors and class names beforehand.
colors = ["black", "black", "red"]
classes = ["class1", "class2","class3"]
# Calling scatter per row, to differentiate each class
for x_per_class, y_per_class, color, label in zip(x, y, colors, classes):
    plt.scatter(x=x_per_class, y=y_per_class, color=color, label=label)

# Adding legends
plt.legend()

plt.ylabel('Yv')
plt.show()

Resultado con leyenda:

color scatter plot with legend

3
Whole Brain 9 dic. 2020 a las 10:49
colors = ['black', 'black', 'red']
a = np.array([
[5.033,-3.066],
[5.454,-3.492],
[-1.971,0.384],
],)
x, y = a.T
print(x, y)
plt.scatter(x, y, c=colors)

plt.ylabel('Yv')
plt.show()
2
one 9 dic. 2020 a las 10:01
65214321