7

我想强制 facet_wrap 从左上角填充,但要始终完全填充底行。(也就是说,从左上角加上完全填充底行所需的任何水平偏移量。)

library(ggplot2)

n <- 1000
df <- data.frame(x=runif(n), y=rnorm(n), label=sample(letters[1:7], size=n, replace=TRUE))
df$label.rev <- factor(df$label, levels=sort(unique(df$label), decreasing=TRUE))

p <- ggplot(df, aes(x=x, y=y)) + geom_point()
p1 <- p + facet_wrap(~ label, ncol=3)
p2 <- p + facet_wrap(~ label, ncol=3, as.table=FALSE)
p3 <- p + facet_wrap(~ label.rev, ncol=3, as.table=FALSE)

p1:我对标签从左到右、从上到下的顺序很满意,但我希望间隙在左上角而不是右下角。

p2:间隙现在在顶行(不幸的是,右上角而不是左上角),但标签顺序错误。

p3:与p2类似;尝试修复标签顺序,但失败了。

我希望这样订购方面:

_ _ A
B C D
E F G

...因此整个底行都有轴,并且因为我认为它看起来比默认值更好。我怎样才能做到这一点?

4

1 回答 1

8

这个修复就够了吗?

library(ggplot2)
n <- 1000
df <- data.frame(x = runif(n), y=rnorm(n), label = sample(letters[1:7], 
                 size = n, replace = TRUE), stringsAsFactors=TRUE)
# following @Didzis' suggestion (with some minor changes)
df$label.new <- factor(df$label, levels=sort(c(""," ",levels(df$label))))
p <- ggplot(df, aes(x=x, y=y)) + geom_point() + 
         facet_wrap(~ label.new, ncol=3,drop=FALSE)

在此处输入图像描述


编辑(来自@baptiste):

从最后一个解决方案开始,从 gtable 中删除 grobs 更容易,

g = ggplotGrob(p)
## remove empty panels
g$grobs[names(g$grobs) %in% c("panel1", "panel2", "strip_t.1", "strip_t.2")] = NULL
## remove them from the layout
g$layout = g$layout[!(g$layout$name %in% c("panel-1", "panel-2", 
                                                "strip_t-1", "strip_t-2")),]
## move axis closer to panel
g$layout[g$layout$name == "axis_l-1", c("l", "r")] = c(9,9)
grid.newpage()
grid.draw(g)

在此处输入图像描述

于 2013-08-20T14:52:46.743 回答