增加R中ggplot2 scale_colour_gradient的对比度?

时间:2013-07-06 19:27:17

标签: r colors plot ggplot2

我使用scale_colour_gradient / scale_colour_gradient2在散点图中制作渐变色点的渐变色。渐变从红色到深红色,或从黑色到红色,如:

ggplot(iris) + geom_point(aes(x=Sepal.Width, y=Sepal.Length, colour=Sepal.Length)) + scale_colour_gradient(low="red", high="darkred")

我经常将scale_colour_gradient设置为对数刻度,因为它代表比率。我的问题是如何增加量表之间的对比度?例如。如此规模的不同部分之间的区别?在我的情况下,比例总是连续的(实数)。任何相关的观点都会有所帮助。

1 个答案:

答案 0 :(得分:5)

看起来像黑色到红色或红色到黑暗都会给你很少的色彩空间。您可以使用十六进制代码为低和高设置指定更多特定颜色,并添加黑色背景以提高对比度。例如:

+ scale_colour_gradient2(low="#22FF00", mid="white", high="#FF0000", midpoint=median(iris$Sepal.Length)) + theme(panel.grid=element_blank(), panel.background=element_rect(fill="black"))

给你更多的对比。请注意,我使用的是scale_color_gradient2,它允许您设置中点颜色并将其归结为数据的摘要统计信息(此处,我使用了中位数)。我还在光谱的相对两端使用了两种颜色。将上述内容添加到代码中会产生:

high-contrast scatterplot

除了玩弄特定的颜色,除非你满意(http://www.rapidtables.com/web/color/RGB_Color.htmiwanthue是选择颜色的好资源),我不知道是否存在设置渐变的方法,使对比度在整个中最大化,而不会产生一些不明显复杂的彩虹色。您可能知道,数据中任意两个给定点之间的对比与这些点的值之间的差异成正比,因此在渐变的不同区域内改变该关系可能并不可取,据我所知,在ggplot2中不可能。

编辑:改善对比度的另一种方法是按所需变量的等级顺序(在本例中为Sepal.Length)而不是变量本身进行着色。这样就形成了一个统一的分布,并且会分散出来。通过给出分位数之间的相等距离​​来获取数据。然而,这可能会产生误导性的数据可视化 - 如果您的数据高度偏斜,一些相同/接近相同的值可以用相当对比的颜色来表示。所以要谨慎使用。

与上述比较:

iris <- iris[with(iris, order(Sepal.Length)),]
iris$rank <- 1:150
ggplot(iris) + geom_point(aes(x=Sepal.Width, y=Sepal.Length, colour=rank)) + scale_colour_gradient2(low="#22FF00", mid="white", high="#FF0000", midpoint=median(iris$rank)) + theme(panel.grid=element_blank(), panel.background=element_rect(fill="black"))

high-contrast scatterplot with color by rank-ordered data

此外,我意识到红色到绿色是最不可能的色盲安全选择。所以你需要选择颜色,这样你的光谱就不会包含红色或绿色。