У меня есть последовательность линейных графиков для двух переменных (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()
.