J'ai une séquence de ligne de parcelles pour les deux variables (x,y) pour un certain nombre de valeurs d'une variable z. Normalement j'ajoutez la ligne des parcelles avec des légendes comme ceci:
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
# suppose mydata is a list of tuples containing (xs, ys, z)
# where xs and ys are lists of x's and y's and z is a number.
legns = []
for(xs,ys,z) in mydata:
pl = ax.plot(xs,ys,color = (z,0,0))
legns.append("z = %f"%(z))
ax.legends(legns)
plt.show()
Mais j'ai trop nombreux graphiques et les légendes couvrira le graphique. Je préfère avoir une barre de couleur indiquant la valeur de z correspondant à la couleur. Je ne peux pas trouver quelque chose comme ça dans la galerie, et toutes mes tentatives de faire face avec la barre de couleur échoué. Apparemment, je dois créer une collection de parcelles avant d'essayer d'ajouter une barre de couleur.
Est-il un moyen facile de faire cela? Merci.
EDIT (précisions):
Je voulais faire quelque chose comme ceci:
import matplotlib.pyplot as plt
import matplotlib.cm as cm
fig = plt.figure()
ax = fig.add_subplot(111)
mycmap = cm.hot
# suppose mydata is a list of tuples containing (xs, ys, z)
# where xs and ys are lists of x's and y's and z is a number between 0 and 1
plots = []
for(xs,ys,z) in mydata:
pl = ax.plot(xs,ys,color = mycmap(z))
plots.append(pl)
fig.colorbar(plots)
plt.show()
Mais cela ne fonctionne pas selon le Matplotlib référence parce que une liste de parcelles n'est pas un "assignable", quoi que cela signifie.
J'ai créé un autre parcelle de la fonction en utilisant LineCollection
:
def myplot(ax,xs,ys,zs, cmap):
plot = lc([zip(x,y) for (x,y) in zip(xs,ys)], cmap = cmap)
plot.set_array(array(zs))
x0,x1 = amin(xs),amax(xs)
y0,y1 = amin(ys),amax(ys)
ax.add_collection(plot)
ax.set_xlim(x0,x1)
ax.set_ylim(y0,y1)
return plot
xs
et ys
sont des listes de listes de coordonnées x et y et zs
est une liste des différentes conditions à colorer chaque ligne. Il se sent un peu comme un cludge bien... je pensais qu'il y aurait une plus belle façon de le faire. J'aime la souplesse de l' plt.plot()
fonction.