例如,如果您有Colormapcmap
:
cmap = matplotlib.cm.get_cmap('Spectral')
你怎样才能得到一个特定的颜色从它之间的0和1,其中0是第一个颜色在Map和1是最后的颜色在Map上?
理想情况下,我可以通过以下操作获得Map中的中间颜色:
>>> do_some_magic(cmap, 0.5) # Return an RGBA tuple
(0.1, 0.2, 0.3, 1.0)
例如,如果您有Colormapcmap
:
cmap = matplotlib.cm.get_cmap('Spectral')
你怎样才能得到一个特定的颜色从它之间的0和1,其中0是第一个颜色在Map和1是最后的颜色在Map上?
理想情况下,我可以通过以下操作获得Map中的中间颜色:
>>> do_some_magic(cmap, 0.5) # Return an RGBA tuple
(0.1, 0.2, 0.3, 1.0)
7条答案
按热度按时间fzsnzjdm1#
您可以使用下面的代码来完成此操作,并且您问题中的代码实际上非常接近您所需要的内容,您所要做的就是调用现有的
cmap
对象。对于范围[0.0,1.0]之外的值,它将(分别)返回底色和底色。默认情况下,这是范围内的最小和最大颜色(即0.0和1.0)。此默认值可以用
cmap.set_under()
和cmap.set_over()
更改。对于
np.nan
和np.inf
等“特殊”数字,默认值为0.0,可以使用cmap.set_bad()
进行更改,类似于上述的上下。最后,您可能需要规范化数据,使其符合范围
[0.0, 1.0]
。这可以使用matplotlib.colors.Normalize
来完成,如下面的小示例所示,其中参数vmin
和vmax
分别描述了应该Map到0.0和1.0的数字。对数归一化器(matplotlib.colors.LogNorm)也可用于具有较大范围值的数据范围。
qjp7pelc2#
为了得到rgba的整数值而不是浮点值,我们可以做
因此,为了根据Ffisegydd的答案简化代码,代码如下所示:
ahy6op9u3#
我曾经遇到过一个类似的情况,我需要从一个颜色Map表的颜色"n"号,这样我就可以分配每种颜色给我的数据。我已经编译了一个代码,这个包称为"mycolorpy"。你可以pip安装它使用:
然后您可以执行以下操作:
示例:从cmap "winter"创建5个十六进制字符串的列表
输出:
从cmap bwr生成16个颜色列表的另一个示例:
输出:
有一个带有用法示例的python notebook可以更好地形象化这一点。
假设你想从一个cmap中生成一个颜色列表,这个cmap被规范化为一个给定的数据,你可以使用:
输出:
也可以使用以下命令反转颜色:
输出:
ryevplcw4#
我正是遇到了这个问题,但我需要连续的图具有高度对比的颜色。我还使用包含参考数据的公共子图来绘制图,所以我希望颜色序列能够一致地重复。
我最初尝试简单地随机生成颜色,在每幅图之前重新植入RNG。这工作正常(在下面的代码中注解掉),但可能生成几乎无法区分的颜色。我想要高对比度的颜色,理想情况下从包含所有颜色的色图中采样。
我在一张图中可以有多达31个数据序列,所以我把色彩Map图分成了这么多个步骤,然后我按照一定的顺序执行这些步骤,以确保我不会很快回到给定颜色的邻域。
我的数据是在一个高度不规则的时间序列,所以我想看到的点和线,与点有'相反'的颜色的线。
考虑到上述所有情况,最简单的方法是生成一个字典,其中包含用于绘制单个序列的相关参数,然后将其作为调用的一部分展开。
这是我的代码,也许不漂亮,但功能齐全。
我的上下文是JupyterLab和Pandas,所以下面是示例图代码:
生成的图可能不是最佳示例,但在交互放大时会变得更加相关。
whitzsjs5#
为了在Ffisegydd和amaliammr解决方案的基础上构建,下面是一个示例,我们为自定义色彩Map表创建CSV表示:
6ljaweal6#
色彩Map表自带归一化方法,因此如果您已经绘制了图,则可以访问特定值的颜色。
s2j5cfk07#
如果你想玩得又快又脏,你可以直接使用Map,或者你也可以按照@amaliammr说的去做。