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
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()
Si vous souhaitez disperser par deux variables et colorer par la troisième, Altair peut être un excellent choix.
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)
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)