Matplotlib - добавить шкалу цвета к последовательности линейных графиков

У меня есть последовательность линейных графиков для двух переменных (x, y) для ряда различных значений переменной z. Обычно я добавляю линейные графики с такими легендами:

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

Но у меня слишком много графиков, и легенды будут покрывать график. Я бы предпочел цветную шкалу, указывающую значение z, соответствующее цвету. Я не могу найти ничего подобного в галерее, и все мои попытки справиться с цветной панелью потерпели неудачу. По-видимому, я должен создать коллекцию графиков, прежде чем пытаться добавить цветовую панель.

Есть ли простой способ сделать это? Спасибо.

РЕДАКТИРОВАТЬ (пояснение):

Я хотел сделать что-то вроде этого:

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

Но это не будет работать в соответствии со ссылкой на Matplotlib, потому что список графиков не является «отображаемым», что бы это ни значило.

Я создал альтернативную функцию построения графика, используя 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 и ys - это списки списков координат x и y и zs - это список различных условий для раскрашивания каждой строки. Хотя это немного похоже на путаницу ... Я подумал, что есть более изящный способ сделать это. Мне нравится гибкость функции plt.plot () .

56
задан Rafael S. Calsaverini 1 December 2011 в 19:57
поделиться