web-dev-qa-db-fra.com

nuage de points matplotlib avec étiquette de couleur et légende spécifiées par l'option c

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.

enter image description here

6
rkjt50r983

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()

enter image description here

12
p-robot

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()
3
HISI