我感兴趣的是,我可以编程实现哪些算法或规则来为绘线生成RGB或HSV颜色,以使它们在视觉上与邻居区分开来。
我知道,在专业地图制作中,有一些算法或规则可以确保地图上没有两个相邻国家的颜色是相同的。我还可以把看作是为情节线挑选好的颜色/阴影(红色,然后是蓝色,然后是紫色/橙色)。
下面是我所说的一个例子--我需要在一个黑色背景上为12条线生成颜色。这里的颜色,我已经用网页安全的RGB颜色代码手工硬编码。当这些线条重叠时,问题就出现了--很难判断你是在看紫色、淡淡的深紫色还是紫色。我正在寻找一种更好的算法来为像这样的绘图线生成颜色。
下面是一个使用jQuery的Flot绘图库的示例,它为图形提供了很好的连续颜色:
发布于 2013-05-14 06:02:54
我建议使用HSV或HSL颜色空间,而不是RGB颜色空间,因为HSV和HSL的结构更适合于生成与人类不同的颜色。您将在RGB中进行更多的工作(如果需要的话,来回转换仍然存在)。
这就是HSV / HSL的样子:
当使用HSV或HSL颜色空间时,您可以(非常粗略地)假设两种颜色的H(色调)分量之间的差异是颜色之间知觉距离的一个很好的近似值--即色调的变化越大,对人类来说颜色就越不同。你可以试着和S(饱和度)和L/V (光/值)玩,也可以找出更多非常不同的颜色,但它们看上去并没有那么不同,因为相同的值变化就像颜色的变化一样。
根据您需要的不同颜色的数量,您可以将色调空间划分为不同颜色的数量。例如,如果您的色调范围为256值,并且需要16种不同的颜色,那么您的第一种颜色可能是(0,128,128),第二种颜色(16,128,128)等等。我有些武断的选择S/L的价值观在中间,因为这通常是轻的和饱和的,以清楚地看到颜色的差异。这个系统很简单,并且假设您不需要了解图形/地图中颜色的邻接。
如果你事先不知道你需要多少种不同的颜色,但你知道上限,并且按照上面的上限将色调范围划分成不同的颜色,那么你就可以使用相同的系统。
如果你(可能)需要很多不同的颜色,你仍然可以使用非常相似甚至相同的颜色,只要它们不出现在具有相似颜色的图形的其他元素附近。这需要了解您正在绘制的图形中的邻接情况,并且可能并不总是简单明了,即使是这样,也可能不是一个好主意,杜克林在评论中指出:对于观众来说,相同的颜色在图形中两次被用于两个不同的概念,这可能会让观众感到困惑。
因此,最后,在最复杂的情况下,您的图形足够复杂,您没有足够的颜色空间来确保在使用上面的系统时不会以颜色太相似的不同元素结束。在这种情况下,您需要建立一个由可视化图形的元素组成的邻接图。邻接是一个模糊的概念-你必须根据你的实际情况正确地定义它。例如,在您的第二个示例中,7月12日的数据有一个阻塞点,每种颜色都与其他颜色相邻。如果可以建立邻接图,一种可以帮助您的方法是图着色问题--有些库可以帮助您--例如,Boost::C++中的图形。
https://softwareengineering.stackexchange.com/questions/198065
复制相似问题