我有一组数据,并希望将colour美学映射到一种"参考值",如下所示:
我仍然希望显示值是连续的,所以简单地使用类似cut()和使用的函数scale_colour_discrete不是我正在寻找的.这是一些示例数据:
set.seed(123)
x <- runif(100, min = 1, max = 10)
y <- runif(100, min = 1, max = 10)
test <- data.frame(x = x, y = y)
test$colour <- runif(100, min = 1, max = 10)
ggplot(test, aes(x = x, y = y, colour = colour)) + geom_point(size = 3)
Run Code Online (Sandbox Code Playgroud)
这产生以下结果:

我很熟悉scale_colour_gradient(low = "red", high = "green"),但是我希望更有意识地将我的颜色转换为所需的值映射,以使区域"流行"更具视觉效果.间距不一定是线性的.换句话说,对于参考值3,映射将是这样的:
value: 1 3 10
colour: red blue green
Run Code Online (Sandbox Code Playgroud)
这可能吗?我还会采用其他解决方案来实现良好的可视化,以便在各点之间轻松突出"理想"值.例如,我考虑替换引用附近的值(ref - tol < colour < ref + tol) <- NA,然后使用scale_colour_gradient's选项na.value.
或者我应该真正考虑这个cut()选项,只需要一个非常小的切割尺寸,然后弄清楚如何逐渐改变颜色沿着合成的断裂?
来自http://docs.ggplot2.org/0.9.2.1/scale_gradient2.html:
scale_color_gradient2(low = "red", midpoint = 3, mid = "blue", high = "green")
Run Code Online (Sandbox Code Playgroud)
更新:
关于OP的评论 - 玩中间点并space="Lab"帮助:
# Using the Lab colour space also improves perceptual properties
# at the price of slightly slower operation
d + scale_colour_gradient2(space="Lab")
Run Code Online (Sandbox Code Playgroud)
从墓地回来 - 鉴于最新的评论,我意识到应该把两行代码放在一起:
scale_color_gradient2(low = "red",
midpoint = 3,
mid = "blue",
high = "green",
space="Lab")
Run Code Online (Sandbox Code Playgroud)