从一个面上删除轴文本

Eli*_*lli 3 r ggplot2

我尝试使用facet_grid() 显示三个时间序列,为了节省空间,我减少了它们之间的面板间距。问题是它们的垂直轴重叠,所以我想仅在中间的图上将其移动到右侧。

由于这在 ggplot2 中似乎不可能,所以我想做的是渲染每个轴,然后通过编辑 gtable 将其删除,但到目前为止我还没有成功。

这是一个最小的例子:

library(ggplot2)

set.seed(123)
df <- data.frame(expand.grid(x = 1:150, type = letters[1:3]))
df$y <- df$x*0.016 + rnorm(150, sd = .5)

ggplot(df, aes(x, y)) + geom_line() +
    facet_grid(type~.) + 
    theme(panel.spacing.y = unit(-3, "lines"), strip.text = element_blank()) +
    scale_y_continuous(sec.axis = dup_axis(name = ""), name = "y")
Run Code Online (Sandbox Code Playgroud)

产生这个:

制作剧情

我想删除每个轴文本以达到此目的:

用 gimp 绘制的图

谢谢!

Eli*_*lli 5

解决方案是将 nullGrob() 分配给 gTable 的相关元素。

gt <- ggplotGrob(g)
t <- gt[["grobs"]][[8]][["children"]][[2]]

# Found those grobs by looking around the table. 
gt[["grobs"]][[8]][["children"]][[2]] <- nullGrob()
gt[["grobs"]][[10]][["children"]][[2]] <- nullGrob()
gt[["grobs"]][[12]][["children"]][[2]] <- nullGrob()

grid.newpage()
grid.draw(gt)
Run Code Online (Sandbox Code Playgroud)

好情节

  • 恭喜你弄清楚了,但这个情节似乎根本无法解释。 (2认同)