web-dev-qa-db-fra.com

Barre de couleurs du nuage de points - Matplotlib

J'essaie d'afficher une barre de couleur de mon nuage de points mais j'obtiens toujours l'erreur:

TypeError: Vous devez d'abord définir set_array pour mappable

Voici ce que je fais pour tracer:

# Just plotting the values of data that are nonzero 
x_data = numpy.nonzero(data)[0] # x coordinates
y_data = numpy.nonzero(data)[1] # y coordinates

# Mapping the values to RGBA colors
data = plt.cm.jet(data[x_data, y_data])

pts = plt.scatter(x_data, y_data, marker='s', color=data)

plt.colorbar(pts)

Si je commente la ligne plt.colorbar(pts) J'ai obtenu le tracé correctement, mais je voudrais également tracer la barre de couleur.

Merci d'avance.

20
pceccon

Vous transmettez des valeurs RVB spécifiques, donc matplotlib ne peut pas construire de palette de couleurs, car il ne sait pas comment il se rapporte à vos données d'origine.

Au lieu de mapper les valeurs aux couleurs RVB, laissez scatter gérer cela pour vous.

Au lieu de:

# Mapping the values to RGBA colors
data = plt.cm.jet(data[x_data, y_data])

pts = plt.scatter(x_data, y_data, marker='s', color=data)

Faire:

pts = plt.scatter(x_data, y_data, marker='s', c=data[x_data, y_data])

(Passez simplement à c ce que vous étiez en train de passer à plt.cm.jet.)

Ensuite, vous pourrez construire une palette de couleurs normalement. L'erreur spécifique vous indique que les couleurs ont été définies manuellement, plutôt que par le biais de set_array (qui gère le mappage d'un tableau de valeurs de données sur RVB).

14
Joe Kington