Je voudrais faire ce type de nuage de points où les points ont des couleurs spécifiées par l'option "c" et la légende montre la signification des couleurs.
La source de données de la mienne est comme suit:
scatter_x = [1,2,3,4,5]
scatter_y = [5,4,3,2,1]
group = [1,3,2,1,3] # each (x,y) belongs to the group 1, 2, or 3.
J'ai essayé ceci:
plt.scatter(scatter_x, scatter_y, c=group, label=group)
plt.legend()
Malheureusement, je n'ai pas eu la légende comme prévu. Comment afficher correctement la légende? Je m'attendais à ce qu'il y ait cinq lignes et chaque ligne montre la couleur et les correspondances de groupe.
Comme dans l'exemple que vous avez mentionné, appelez plt.scatter
pour chaque groupe:
import numpy as np
from matplotlib import pyplot as plt
scatter_x = np.array([1,2,3,4,5])
scatter_y = np.array([5,4,3,2,1])
group = np.array([1,3,2,1,3])
cdict = {1: 'red', 2: 'blue', 3: 'green'}
fig, ax = plt.subplots()
for g in np.unique(group):
ix = np.where(group == g)
ax.scatter(scatter_x[ix], scatter_y[ix], c = cdict[g], label = g, s = 100)
ax.legend()
plt.show()
regarde ça:
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()
scatter_x = np.array([1,2,3,4,5])
scatter_y = np.array([5,4,3,2,1])
group = np.array([1,3,2,1,3])
for g in np.unique(group):
i = np.where(group == g)
ax.scatter(scatter_x[i], scatter_y[i], label=g)
ax.legend()
plt.show()