【问题标题】:make one panel blank in ggplot2在ggplot2中使一个面板空白
【发布时间】:2013-12-12 16:48:20
【问题描述】:
p <- ggplot(mtcars, aes(mpg, wt)) 
p + geom_point()+facet_grid(cyl ~ vs)+theme_bw()

我想将面板(右下角的 1 对 8)设为空白,不显示任何数据点,但同时,我想保持这种排列。

所以facet_wrap(cyl ~ vs) 无法解决我的问题。

也许更普遍的问题是是否可以在 ggplot2 中安排每个面板?

【问题讨论】:

  • 我不久前放弃了尝试在 ggplot 中执行此操作,使用常规的 plot 命令很简单。此外,您可以尝试将其发送到 ggplot 邮件列表。
  • 但如果您使用facet_wrap(cyl ~ vs, ncol=2),则排列保留,尽管标签略有变化。这不是你的本意吗?

标签: r ggplot2


【解决方案1】:

您可以这样做,但不能使用 facet_wrap(据我所知)。创建单独的子图。如需详细的分步方法,请see my answer here

创建一个空白图并使用包gridExtra 您可以合并图:

library(gridExtra)
library(grid)

blank <- grid.rect(gp=gpar(col="white"))

grid.arrange(plot1, plot2, blank, plot3, ncol=2)

这种方法也会对最终情节的外观产生很大影响(恕我直言)。

【讨论】:

  • @joaoal 不,不是; grid.arrangegridExtra-package 中的一个函数
  • @Jaap 但grid.rect 需要library("grid")
  • 这对我不起作用,在情节之前创建了一个巨大的空白区域......
【解决方案2】:

你改变了表 grobs。

## get the table grobs
g1 <- ggplot_gtable(ggplot_build(p))

library(gtable)
library(grid)
## here the main modification
## change one panel by a new rectangle.
pp <- gtable_add_grob(g1,rectGrob(gp=gpar(col=NA)),t=8,l=6,b=8,r=6)
grid.draw(pp)

【讨论】:

  • g = ggplotGrob(p); ;g$grobs[[max(which(g$layout$name == "panel"))]] = nullGrob(); grid.draw(g)
  • @agstudy,非常感谢 agstudy,这正是我想要的。
猜你喜欢
  • 2013-07-08
  • 1970-01-01
  • 1970-01-01
  • 2021-12-20
  • 1970-01-01
  • 2019-06-23
  • 1970-01-01
  • 1970-01-01
  • 2018-06-07
相关资源
最近更新 更多