我尝试使用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")
产生这个:
我想删除每个轴文本以达到这个目的:
谢谢!
答案 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)