0

我使用 marrangeGrob() 而不是 facet_wrap() 从地块列表中生成地块。但是,我似乎无法添加图例。

我已经使用

    g_legend<-function(a.gplot){
      tmp <- ggplot_gtable(ggplot_build(a.gplot))
      leg <- which(sapply(tmp$grobs, function(x) x$name) == "guide-box")
      legend <- tmp$grobs[[leg]]
      return(legend)}

但是,我无法将其添加到我的情节中。有人知道方法吗?

4

1 回答 1

1

这是使用内置diamonds数据框的示例:

library(ggplot2)
library(gridExtra)
library(dplyr)

g_legend<-function(a.gplot){
  tmp <- ggplot_gtable(ggplot_build(a.gplot))
  leg <- which(sapply(tmp$grobs, function(x) x$name) == "guide-box")
  legend <- tmp$grobs[[leg]]
  return(legend)}

首先,我们将创建两个绘图一起布置:

df <- count(diamonds, cut)

p1 = ggplot(df, aes(x=cut, y=n, label=format(n, big.mark=","), fill=cut)) +
  geom_bar(stat="identity") +
  geom_text(aes(y=0.5*n), colour="white") +
  coord_flip() +
  theme(legend.position="bottom")

p2 = ggplot(diamonds %>% sample_n(1000), aes(x=carat, y=price, colour=cut)) +
  geom_point() 

现在将图例保存p1为单独的 grob:

leg = g_legend(p1)

使用并排布置两个绘图arrangeGrob,然后使用marrangeGrob布置两绘图布局及其下方的图例。请注意,我们还从原始图中删除了图例。

marrangeGrob(grobs=list(
  arrangeGrob(grobs=lapply(list(p1,p2), function(p) {
    p + guides(colour=FALSE, fill=FALSE)
  }), ncol=2),
  leg), ncol=1, nrow=2, heights=c(20,1))

在此处输入图像描述

于 2017-03-04T01:20:42.873 回答