ggplot2:如何仅在一个方面删除一个级别?

ggplot2: How to remove one level in one facet only?

这是一个可重现的例子

set.seed(12)
d = data.frame(
  x = rep(LETTERS[c(2,1,3,4)],each=30),
  y=rnorm(120),
  facet = c(rep("facet 1", 20), rep("facet 3", 10), rep(rep(paste("facet",1:3), each=10),3))
 )

require(ggplot2)
ggplot(d,aes(x=x,y=y)) + geom_boxplot() + facet_grid(.~facet)

如您所见,facet 2 中没有 x == "B" 的条目。

如何删除空 space 并勾选 B 仅用于 facet 2

facet 2 的水平宽度将是其他面的水平宽度的 3/4。

您必须同时设置 scales = "free_x"space = "free_x":

require(ggplot2)
ggplot(d,aes(x=x,y=y)) + geom_boxplot() +
    facet_grid(.~facet, scales = "free_x", space = "free_x")

scales = "free_x" 允许 x 轴在小平面之间不同。因此,在第二个方面,缺失的级别将被省略。

space = "free_x" 允许小平面的不同空间宽度。根据文档:

if "free_x" their width will be proportional to the length of the x scale;

其中 "their width" 指刻面的宽度。