我正在尝试使用plotly和matplotlib制作一些图,我使用的数据通常被分为大约4到8个不同的组,我在图中将每个组设置为一种离散的颜色。我在这里找到了一个很好的资源(https://plotly.com/python/discrete-color/),它允许我为每组获取一种颜色。然而,最近我不得不绘制多达三十个不同的组,这是一个问题,因为如果您查看我刚刚链接到的资源,每个系列的离散颜色的最大数量(例如plotly.colors.qualitative.Light24,plotly .colors.qualitative.Antique等)只有24。
为了绘制我的数据,我真的希望能够为我的数据中的组数获取正确的颜色数(这些组在视觉上也彼此不同)。但我还有一个额外的问题,我使用的 matplotlib 绘图工具仅采用 rgb 格式的颜色(例如 rgb(158,185,243)),而不是十六进制格式(例如 #00B5F7)。
到目前为止,我已经解决了这个问题,只需将 rgb 格式的离散颜色系列(例如,plotly.colors.qualitative.Dark1、plotly.colors.qualitative.Set1)作为多个列表,然后将列表添加在一起,直到我有足够的离散颜色,但有时这会导致某些颜色彼此过于相似。这也意味着不同数量的组的输入不是动态的。
有人有更好的策略来从绘图中获取正确数量的离散颜色吗?
好吧,我找到了一种最适合我的方法。当然,它不是最优雅的,但考虑到我的 matplotlib 仅适用于格式为 0 到 255 之间的整数列表列表的 rgb 值,这是我编写的代码:
import random
NUM_COLORS = 30
color_set = set()
while len(color_set)<NUM_COLORS:
random_integers = [random.randint(0, 255) for _ in range(3)]
color_set.add(tuple(random_integers))
color_set = list(color_set)
color_set = [list(n) for n in color_set]
color_set
当然,它并不总是产生我认为最“吸引人”或“有凝聚力”的配色方案,但我通常只是重新运行该函数,直到配色方案看起来更好。