带有geom_raster和geom_point的两个颜色渐变

时间:2020-01-21 20:10:16

标签: r ggplot2 heatmap

我有一个非常简单的问题,但是我一直在努力寻找在线答案。

我有一个用 ggplot + geom_raster 制作的热图。我想在每个矩形中插入一个符号,以便它们可以传达另一条信息。为此,我想到了使用 geom_point

绘图很好,但是我在使用颜色渐变时遇到了问题。

plot <- ggplot(data, aes(x = Var1, y = Var2, fill = value)) +
        geom_tile() + 
        geom_raster(aes(fill=value)) +
        scale_fill_gradient2(low = "gray", high = "red", mid = "#e3e3e3", midpoint = "0") + 
        geom_point(data = significance, aes(x = Var1, y = Var, color = value), shape = 21, size = 3) +
        scale_color_gradient(low = "gray", high = "gray")

但是,由于某种原因,散点图正在吸收两个梯度,而不仅仅是吸收了“颜色”梯度。由于热图的值非常接近于零,散点图的值很高,因此“填充”部分使热图变为灰色。

我以此为参考来尝试两个渐变:Using two scale colour gradients ggplot2

1 个答案:

答案 0 :(得分:3)

这是一个简单的可重现示例,将填充和颜色分别用于栅格和点。请注意,为了使其正常工作,我们对这些点使用了实心而不是实心的形状。并且我们确保美学在相关的领域中,因此它们不会被其他人继承。还要注意,对点和栅格使用不同的值名称可能是更好的做法,但是在示例中,我同时调用value来匹配OP中的示例。

df1 = data.frame(expand.grid(x=1:10, y=1:10), value = rnorm(100))
df2 = data.frame(x = sample(1:10), y =  sample(1:10), value = runif(10,20,50))

ggplot(df1, aes(x = x, y = y)) +
  geom_tile(aes(fill = value)) + 
  scale_fill_gradient2(low = "gray", high = "red", mid = "#e3e3e3", midpoint = 0) +
  geom_point(data = df2, aes(color = value), shape = 19, size = 3) +
  scale_color_gradient(low = "gray", high = "blue")

enter image description here