web-dev-qa-db-fra.com

barre de couleurs matplotlib pour scatter

Je travaille avec des données qui ont les données ont 3 paramètres de traçage: x, y, c. Comment créez-vous une valeur de couleur personnalisée pour un nuage de points?

Étendre ceci exemple J'essaie de faire:

import matplotlib
import matplotlib.pyplot as plt
cm = matplotlib.cm.get_cmap('RdYlBu')
colors=[cm(1.*i/20) for i in range(20)]
xy = range(20)
plt.subplot(111)
colorlist=[colors[x/2] for x in xy] #actually some other non-linear relationship
plt.scatter(xy, xy, c=colorlist, s=35, vmin=0, vmax=20)
plt.colorbar()
plt.show()

mais le résultat est TypeError: You must first set_array for mappable

68
Adam Greenhall

De la documentation de matplotlib sur scatter 1 :

cmap n'est utilisé que si c est un tableau de floats

La liste de couleurs doit donc être une liste de flotteurs plutôt qu'une liste de n-uplets, comme vous l'avez maintenant. plt.colorbar () veut un objet mappable, comme le CircleCollection renvoyé par plt.scatter (). vmin et vmax peuvent alors contrôler les limites de votre barre de couleurs. Les éléments situés en dehors de vmin/vmax prennent les couleurs des points de terminaison.

Comment ça marche pour vous?

import matplotlib.pyplot as plt
cm = plt.cm.get_cmap('RdYlBu')
xy = range(20)
z = xy
sc = plt.scatter(xy, xy, c=z, vmin=0, vmax=20, s=35, cmap=cm)
plt.colorbar(sc)
plt.show()

Image Example

169
matt

Si vous souhaitez disperser par deux variables et colorer par la troisième, Altair peut être un excellent choix.

Création du jeu de données

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

df = pd.DataFrame(40*np.random.randn(10, 3), columns=['A', 'B','C'])

Parcelle Altair

from altair import *
Chart(df).mark_circle().encode(x='A',y='B', color='C').configure_cell(width=200, height=150)

Plot

enter image description here

3
Nipun Batra

Voici le moyen OOP de l'ajout d'une barre de couleur:

fig, ax = plt.subplots()
im = ax.scatter(x, y, c=c)
fig.colorbar(im, ax=ax)
2
neurite