如何使用colormap(比如jet)在运行时使用标量值设置matplotlib中一行的颜色?我在这里尝试了几种不同的方法,我觉得我很难过.values[]是一系列标量.曲线是一组1-d数组,标签是文本字符串数组.每个阵列具有相同的长度.
fig = plt.figure()
ax = fig.add_subplot(111)
jet = colors.Colormap('jet')
cNorm = colors.Normalize(vmin=0, vmax=values[-1])
scalarMap = cmx.ScalarMappable(norm=cNorm, cmap=jet)
lines = []
for idx in range(len(curves)):
line = curves[idx]
colorVal = scalarMap.to_rgba(values[idx])
retLine, = ax.plot(line, color=colorVal)
#retLine.set_color()
lines.append(retLine)
ax.legend(lines, labels, loc='upper right')
ax.grid()
plt.show()
Run Code Online (Sandbox Code Playgroud) 对于变量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()
Run Code Online (Sandbox Code Playgroud)
但是我有太多的图表,传说将涵盖图表.我宁愿用一个颜色条来表示与颜色对应的z的值.我无法在galery中找到类似的东西,我所有的尝试都处理了colorbar失败.显然我必须在尝试添加颜色条之前创建一组绘图.
是否有捷径可寻?谢谢.
编辑(澄清):
我想做这样的事情:
import matplotlib.pyplot as plt
import matplotlib.cm as cm
fig = plt.figure()
ax = fig.add_subplot(111)
mycmap = cm.hot
# suppose mydata is …Run Code Online (Sandbox Code Playgroud) 当前情况:
我有多组线,其中同一组中的线会根据某些特定于组的参数而变化。我根据此参数为同一组内的每行分配一种颜色表中的颜色,并对每个组使用不同的颜色表。
现在,我想在图上添加图例,每组线有一个条目。

仅适用于一组线的解决方案:
如果我只有一组线,则最好的标注方法是按照答案的建议添加色条:Matplotlib:将色条添加到不可映射的对象。
如何最好地对多组线执行此操作?
因为我有多组这样的线,所以我不想为每个新参数添加一个颜色条。相反,我宁愿在图例中放置填充有对应色图的色块(作为一种迷你色条)。
最小的工作示例:
在下面的内容中,您可以找到当前情况的最小工作示例。但是请注意,我在很大程度上简化了隐藏参数依赖性的行的计算。因此,我的“参数” param就是我要遍历的索引。我的实际代码根据具有更复杂功能的模型参数来计算x和y值。因此,param_max此处的最大值对于每组线都是相同的,尽管实际上并非如此。
import numpy as np
import matplotlib.pyplot as plt
x_array = np.linspace(1, 10, 10)
y_array = x_array
param_max = x_array.size
cmaps = [plt.cm.spring, plt.cm.winter] # set of colormaps
# (as many as there are groups of lines)
plt.figure()
for param, (x, y) in enumerate(zip(x_array, y_array)):
x_line1 = np.linspace(x, 1.5 * x, 10)
y_line1 = np.linspace(y**2, y**2 - x, 10)
x_line2 = np.linspace(1.2 …Run Code Online (Sandbox Code Playgroud)