我有一个两个变量(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()
功能的灵活性。