将图和图例保存到单独的文件?

Kat*_*ber 5 r ggplot2

我有一些数据集包含的图例条目比用颜色或完全用符号显示所能分辨的要多。实际上,它是彩虹,但是在众多图例条目中,它们使绘制的图块比宽度高得多。

由于图例并不像舒适地确定地块大小那么重要,因此在将地块保存到PNG之前,我只是预览并删除它们。

像这样:

library(ggplot2)
p <- ggplot(diamonds, aes(cut, depth)) + geom_point(aes(colour = factor(carat), size = price))
p
p <- p + theme(legend.position = "none")
p
Run Code Online (Sandbox Code Playgroud)

但是,只能选择倾斜图高或完全删除图例,这有点令人沮丧。巧妙的折衷办法是将图例放在单独的PNG中,以便在真正必要时可以对其进行检查。有没有办法做到这一点?

Soi*_*Guy 7

这可以通过cowplot和 实现ggpubr

library(cowplot)
my_legend <- get_legend(your_ggplot_object)
library(ggpubr)
as_ggplot(my_legend)
Run Code Online (Sandbox Code Playgroud)

  • 看起来你只需要 ggpubr (2认同)

Rol*_*and 5

library(ggplot2)
p <- ggplot(diamonds, aes(cut, depth)) + geom_point(aes(colour = factor(carat), size = price))

#extract legend
#https://github.com/hadley/ggplot2/wiki/Share-a-legend-between-two-ggplot2-graphs
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)
}

mylegend <- g_legend(p)
library(grid)
grid.draw(mylegend)
Run Code Online (Sandbox Code Playgroud)

只需绘制到不同的设备即可。