红紫蓝图的证据

机器算法验证 数据可视化
2022-04-14 12:54:22

出于某种原因,我看到了大量的图表,其配色方案(表示连续变量)从红色到紫色到蓝色的过渡。这里只是一个例子(来自一篇博文,但我已经看到很多已发布的例子): http://www.r-bloggers.com/bubble-plots-ggplot2/

就我个人而言,我发现不可能清楚地将颜色变化与绘制变量的幅度增加联系起来,但我意识到颜色本质上是主观的,而且我已经看过这么多的事实让我怀疑这是有原因的为了那个原因。

文献中对红紫蓝过渡是否有明确的共识?

1个回答

为了详细说明我上面的评论,我的怀疑部分得到了在知识发现博客上创建上述引用图的代码的证实您是否看到许多使用 ggplot2 图形的示例?看来scale_color_gradient的默认值是蓝色到红色。在我看来,这是与 RGB 相对的沿LAB 颜色空间的默认插值(所以我不确定确切的转换),但结果看起来非常相似。下面是 R 中的一个示例,用于混合红色和蓝色,同时将绿色保持在常数 0。

red <- rep(seq(15,255,15),16)
blue <- rep(seq(15,255,15), each = 16)
color <- rgb(red = red, green = 0, blue = blue, maxColorValue = 255)
plot(x = red, y = blue, col = color, pch = 19, cex = 3)

在此处输入图像描述

要详细说明为什么对于顺序色标(即从低到高)来说这是一个不好的选择(如help(scale_color_gradient)页面上所写),您通常希望保持色调恒定并改变色度和亮度(色度和亮度在Munsell中定义)色标)。或者,更直截了当,人们通常不会将不同的色调解释为更高或更低的值,但人们通常可以将更深或更浅的颜色按顺序关联起来。

像这样的蓝色到红色插值对于发散的配色方案可能是合理的选择,但通常我们希望阴影之间有更多的对比。有关一些示例,请参阅scale_gradient2帮助页面。因此,根据视觉感知的格式塔原则,我建议重写以下引用的情节;

(p + geom_point(aes(x = month, y = year, size = Value, colour = VIX),shape=16, alpha=0.80) +
    scale_colour_gradient(limits = c(10, 60), low="red", high="black", breaks= seq(10, 60, by = 10))  +
    scale_x_continuous(breaks = 1:12, labels=c("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec")) +
    scale_y_continuous(trans = "reverse") +
    theme_bw() + opts(panel.grid.minor=theme_blank(), panel.grid.major=theme_blank())
)

在此处输入图像描述

这无疑是一项艰巨的视觉任务,因为小点需要一些颜色才能将它们与背景区分开来(我删除了网格线和灰色背景以提供更多对比度)。其他图形选项可能是缩放点,使最小的点稍微大一点,并利用轮廓,使它们与背景更明显区分开来。但是,IMO 更有成效的方法不是通过热图,而是通过修饰线图(参见Andrew Gelman 关于一年中生日的类似讨论)。

(p + geom_line(aes(x = Date, y = Value), alpha = 0.2) +
     geom_point(aes(x=Date, y=Value, size=VIX), shape=1)
)

在此处输入图像描述

对于在绘图中使用颜色的其他参考资料,我强烈建议制图师 Cynthia Brewer 的工作。她的ColorBrewer 色阶得到了广泛的应用,并且正在成为生成色阶的事实标准。