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