我正在尝试在matplotlib中为散点图制作离散颜色条
我有我的x,y数据,对于每个点,我希望用唯一的颜色表示的整数标记值,例如。
plt.scatter(x, y, c=tag)
典型地,tag将是范围从0-20的整数,但是确切的范围可以改变
到目前为止,我只是使用默认设置,例如。
plt.colorbar()
这给出了一个连续的颜色范围。理想情况下,我想要一组n个离散的颜色(在这个例子中n=20)。甚至更好的是得到一个标签值0来产生灰色,1-20是彩色的。
我找到了一些“食谱”脚本,但它们非常复杂,我不认为它们是解决看似简单问题的正确方法
8条答案
按热度按时间qxsslcnc1#
你可以通过使用BoundaryNorm作为散点的归一化器来创建一个自定义的离散色条。
对于图像,我经常使用cmap.set_bad()并将我的数据转换为numpy掩码数组。这将更容易使0变灰,但我无法使其与散点或自定义cmap一起工作。
作为一种选择,你可以从头开始创建你自己的cmap,或者读出一个现有的cmap并覆盖一些特定的条目。
我个人认为,20种不同的颜色有点难以阅读的具体价值,但这取决于你当然。
amrnrhlw2#
您可以按照this example below或newly added example in the documentation
这会产生以下图像:
ymzxtsji3#
上面的答案都很好,除了它们在颜色条上没有正确的记号位置。我喜欢把记号放在颜色的中间,这样数字->颜色Map就更清晰了。你可以通过改变matshow调用的限制来解决这个问题:
aor9mmx14#
要将a值设置为高于或低于colormap的范围,您需要使用colormap的
set_over
和set_under
方法。如果您想要标记特定值,请将其屏蔽(即创建一个掩码数组),并使用set_bad
方法。(查看基本colormap类的文档:http://matplotlib.org/api/colors_api.html#matplotlib.colors.Colormap)听起来你想要这样的东西:
lrpiutwd5#
这个主题已经很好地涵盖了,但我想添加一些更具体的东西:我想确保某个值将Map到该颜色(而不是任何颜色)。
这并不复杂,但因为它花了我一些时间,它可能会帮助其他人不像我一样失去那么多时间:)
gr8qqesn6#
我一直在研究这些想法,这里是我的五美分价值。它避免调用
BoundaryNorm
以及指定norm
作为scatter
和colorbar
的参数。然而,我没有找到消除对matplotlib.colors.LinearSegmentedColormap.from_list
的冗长调用的方法。一些背景是matplotlib提供了所谓的定性色彩图,旨在用于离散数据。例如,
Set1
有9种容易区分的颜色,tab20
可以用于20种颜色。使用这些Map,使用它们的前n种颜色来为n个类别的散点图着色是很自然的,该示例还生成一个颜色条,其中有n个适当标记的离散颜色。调用
Set1
中的n
指定该色彩Map表的前n
种颜色,调用from_list
中的最后n
指定用n
种颜色构造Map表(默认值为256)。为了将cm
设置为plt.set_cmap
的默认色彩Map表,我发现有必要给予一个名称并注册它,即:uttx8gqw7#
我想你会想看看颜色。ListedColormap可以生成你的色彩Map表,或者如果你只是需要一个静态色彩Map表,我一直在研究an app,这可能会有所帮助。
brtdzjyr8#
@Enzoupi的回答有很多好东西在里面。我把它分解了一下,看看是什么。这是我的注解版本。所有的功劳都归于他们。