9
p <- ggplot(mtcars, aes(mpg, wt)) 
p + geom_point()+facet_grid(cyl ~ vs)+theme_bw()

Pic

I would like to make the panel (1 vs 8 in the lower right hand corner) blank where no data points are shown, but at the same time, I would like to keep this arrangement.

so facet_wrap(cyl ~ vs) could not solve my problem.

maybe more general question is that is it possible to arrange each panel in ggplot2?

user36102
  • 275
  • 2
  • 3
  • 12
  • I gave up trying to do it in ggplot a while ago, it's straightforward with the regular plot command. Also, you might try sending this to the ggplot mailing list. – Jeremy Miles Dec 12 '13 at 18:03
  • But the arrangement **is** preserved if you use `facet_wrap(cyl ~ vs, ncol=2)`, although the labeling changes slightly. Is this not your intention? – Nick Dec 12 '13 at 19:32

2 Answers2

18

You can do that, but not with facet_wrap (as far as I know). Create your seperate sub-plots. For a detailed step by step approach, see my answer here.

Create a blank plot & with the package gridExtra you can combine the plots:

library(gridExtra)
library(grid)

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

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

This approach will give you also a lot influence on the appearance of you final plot (IMHO).

user20650
  • 24,654
  • 5
  • 56
  • 91
Jaap
  • 81,064
  • 34
  • 182
  • 193
11

You change the table 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)

enter image description here

agstudy
  • 119,832
  • 17
  • 199
  • 261