如何在matplotlib中设置一条线的颜色,它在运行时提供了标量值(比如说jet
)?我尝试了几种不同的方法,我想我被难住了。values[]
是一个标量数组。曲线是一组一维数组,标签是一组文本字符串。每个数组具有相同的长度。
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()
5条答案
按热度按时间5fjcxozz1#
您收到的错误是由于您如何定义
jet
。您正在创建名为'jet'的基类Colormap
,但这与获取'jet'色彩Map表的默认定义有很大不同。不应直接创建此基类,而应仅示例化子类。您在示例中发现的是Matplotlib中的错误行为。运行此代码时,应该会生成更清晰的错误消息。
这是您的示例的更新版本:
导致:
使用
ScalarMappable
比我的相关答案中提出的方法有所改进:使用matplotlib创建超过20种独特的图例颜色czq61nw12#
我认为包含一个我认为更简单的方法是有益的,它使用numpy的linspace和matplotlib的cm-type对象。上面的解决方案有可能是针对旧版本。我用的是Python 3。4.3,matplotlib 1.4.3和numpy 1。9.3.,我的解决方案如下。
这导致跨越整个cm的1000条独特颜色的线。如下图所示。如果运行这个脚本,您会发现可以放大各个行。
现在,假设我希望我的1000行颜色只是跨越400到600行之间的绿色部分。我只是简单地将开始和停止值更改为0。4和0.6,这导致仅使用cm的20%。喷射颜色图0之间。4和0.6。
因此,在一行摘要中,您可以从www. example创建rgba颜色列表 www.example.com colormap相应地:
在本例中,我使用了通常调用的map jet,但您可以通过调用以下命令来找到matplotlib版本中可用的颜色Map的完整列表:
pftdvrlh3#
matplotlib
中的线条样式、标记和定性颜色的组合:更新:不仅支持
ListedColormap
,还支持LinearSegmentedColormap
ttvkxqim4#
你可以做我写的从我删除的帐户(禁止新职位:(有)。它相当简单和好看。
我通常使用这3个中的第3个,我也是检查1和2版本。
示例3:
Ship RAO of Roll vs Ikeda damping in function of Roll amplitude A44
u0sqgete5#
您可以使用Seaborn:
https://seaborn.pydata.org/tutorial/color_palettes.html#using-circular-color-systems