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_raster
和geom_point
已经分别使用了fill
和color
。所以只需删除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 的两种颜色渐变的主要内容,如果未能解决你的问题,请参考以下文章
ggplot2 未正确保存 geom_raster() 绘图
如何更改 ggplot2 geom_raster 中的插值/平滑