geom_raster 和 geom_point 的两种颜色渐变

Posted

技术标签:

【中文标题】geom_raster 和 geom_point 的两种颜色渐变【英文标题】:Two color gradients with geom_raster and geom_point 【发布时间】:2020-01-21 20:10:16 【问题描述】:

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

我有一个用 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

【问题讨论】:

shape=21 是一个 填充 圆圈 - 将获得填充美感。试试 shape =19(实心圆) 现在它没有被填充,但它仍然超过了光栅的scale_fill_gradient2(热图仍然是全灰色的)。两种比例都是根据 geom_point 的值定义的,而不是在 geom_raster 和 geom_point 之间分割 您链接到的参考是在耍花招。通过使用形状 21,它将fill 映射到一个geom_point,而将常规color 映射到另一个geom_point。你不需要那个,因为geom_rastergeom_point 已经分别使用了fillcolor。所以只需删除shape = 12 您应该提供reproducible example 只是为了将来保留,没有问题如此简单以至于不需要可重复的示例。尽管这可能意味着可重现的示例将非常短。这需要你一点时间,但它可以为其他人节省大量工作。 【参考方案1】:

这是一个简单的可重现示例,分别为栅格和点使用填充和颜色。请注意,为了让它工作,我们使用实心而不是填充形状作为点。并且我们确保美学在相关的几何中,所以它们不会被其他继承。另请注意,对 hte 点和栅格使用不同的值名称可能是更好的做法,但在示例中,我同时调用 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")

【讨论】:

以上是关于geom_raster 和 geom_point 的两种颜色渐变的主要内容,如果未能解决你的问题,请参考以下文章

geom_raster() 在地图顶部产生白色表面

ggplot2 未正确保存 geom_raster() 绘图

如何更改 ggplot2 geom_raster 中的插值/平滑

R:我正在从矩阵制作热图,但 ggplot2 geom_raster 将(数字)值重新排序为字母

带有形状、填充和颜色的 geom_point

使用 geom_point 在 R 中绘制多列和分组 [关闭]