向 ggplot geom_tile 添加多个图例

Posted

技术标签:

【中文标题】向 ggplot geom_tile 添加多个图例【英文标题】:Add multiple legends to ggplot geom_tile 【发布时间】:2018-08-14 06:39:19 【问题描述】:

我正在使用 ggplot 创建一个热图样式图,并希望添加第二个图例,其中数据以不同的方式缩放。我想知道是否有一种简单的方法可以做到这一点。

我不认为这是其他“多个传说”问题的重复,例如Multiple legends for a ggplot in R 至关重要的是,我想为相同的美学添加额外的图例 - 即一个美学映射,两个图例。

示例代码

# Create a dataframe with some dummy data

x <- c()
y <- c()

for(i in 1:100)
  for(j in 1:100)

    x <- c(x, i)
    y <- c(y, j)
  


example_data <- data.frame(x, y)
example_data$z <- example_data$x*example_data$y
example_data$z_rescale <- example_data$z*0.5

现在我们有了一些数据,我想用“z”作为颜色渐变来绘制热图。

ggplot(example_data, aes(x = x, y = y, fill = z)) + 
  geom_tile() +
  scale_fill_gradient(low = "blue", high = "red") +
  scale_x_continuous(expand = c(0, 0)) +
  scale_y_continuous(expand = c(0, 0))

对重新缩放的 z 执行相同操作会得到相同的图,但使用重新缩放的图例:

ggplot(example_data, aes(x = x, y = y, fill = z_rescale)) + 
  geom_tile() +
  scale_fill_gradient(low = "blue", high = "red") +
  scale_x_continuous(expand = c(0, 0)) +
  scale_y_continuous(expand = c(0, 0))

然而,我想做的是有一个显示两个不同传说的单一情节,看起来像这个模型:

现在,我想这可以通过创建两个图来实现,在其中一个图中找到代表图例的 grob,然后巧妙地将其添加到第二个图中......但是,有没有更简单的方法?可以俯瞰吗?

非常感谢!

【问题讨论】:

Multiple legends for a ggplot in R的可能重复 【参考方案1】:

请添加代码

aes(color = z_rescale) +
scale_color_gradient(low = "blue", high = "red") +

geom_tile() 行之后,您将获得所需的

【讨论】:

以上是关于向 ggplot geom_tile 添加多个图例的主要内容,如果未能解决你的问题,请参考以下文章

ggplot2 不会将图例添加到具有多个层的箱线图

在 ggplot2 中向线型图例添加附加线

ggplot2图例到底部和水平

如何为 geom_tile 中的每个变量添加单独的图例?

获取 ggplot2 图例以在 r 中显示百分比符号

ggplot折线图的问题