gpt4 book ai didi

python - Matplotlib - 将颜色条添加到一系列线图

转载 作者:IT老高 更新时间:2023-10-28 20:23:29 29 4
gpt4 key购买 nike

对于变量 z 的许多不同值,我有一个用于两个变量 (x,y) 的线图序列。我通常会添加带有这样的图例的线图:

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

xsys 是 x 和 y 坐标列表的列表,而 zs 是为每行着色的不同条件的列表。不过感觉有点像一团糟……我认为会有一种更简洁的方法来做到这一点。我喜欢 plt.plot() 函数的灵 active 。

最佳答案

(我知道这是一个老问题,但是......)彩条需要 matplotlib.cm.ScalarMappableplt.plot 产生不可标量映射的线条,因此,为了制作颜色条,我们需要制作可映射的标量。

好的。所以 ScalarMappable 的构造函数需要一个 cmap 和一个 norm 实例。 (规范将数据缩放到 0-1 的范围,您已经使用过的 cmaps 并采用 0-1 之间的数字并返回颜色)。所以在你的情况下:

import matplotlib.pyplot as plt
sm = plt.cm.ScalarMappable(cmap=my_cmap, norm=plt.normalize(min=0, max=1))
plt.colorbar(sm)

因为您的数据已经在 0-1 范围内,您可以将 sm 创建简化为:

sm = plt.cm.ScalarMappable(cmap=my_cmap)

希望对某人有所帮助。

编辑:对于 matplotlib v1.2 或更高版本,代码变为:

import matplotlib.pyplot as plt
sm = plt.cm.ScalarMappable(cmap=my_cmap, norm=plt.normalize(vmin=0, vmax=1))
# fake up the array of the scalar mappable. Urgh...
sm._A = []
plt.colorbar(sm)

编辑:对于 matplotlib v1.3 或更高版本,代码变为:

import matplotlib.pyplot as plt
sm = plt.cm.ScalarMappable(cmap=my_cmap, norm=plt.Normalize(vmin=0, vmax=1))
# fake up the array of the scalar mappable. Urgh...
sm._A = []
plt.colorbar(sm)

编辑:对于 matplotlib v3.1 或更高版本简化为:

import matplotlib.pyplot as plt
sm = plt.cm.ScalarMappable(cmap=my_cmap, norm=plt.Normalize(vmin=0, vmax=1))
plt.colorbar(sm)

关于python - Matplotlib - 将颜色条添加到一系列线图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8342549/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com