从一个方面移除轴文本

时间:2017-01-26 23:11:59

标签: 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")

产生这个:

Produced plot

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

Plot made with gimp

谢谢!

1 个答案:

答案 0 :(得分:4)

解决方案是将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)

good plot