刻度标记与ggplot2中的面板未对齐[R]

时间:2017-12-04 16:44:59

标签: r ggplot2

在刻度标记结束和面板开始的位置之间似乎总有一些小而明显的偏移。

minimum working example

当指定轴限制以使轴以刻度线结束时(见上文),这一点更为明显。 例如,在y轴上,最高刻度太高而最低刻度太低。

重现的代码:

library(ggplot2) p <- ggplot(mtcars,aes(mpg, wt)) + geom_point() + scale_y_continuous(limits=c(1,5),expand=c(0,0)) p <- p + theme_few() p <- p + theme(axis.ticks=element_line(size=0.5),axis.ticks.length = unit(0.5, "cm")) # enlarged for clarity, although this happens regardless 我该如何解决这个问题?

修改

在我自己的数据中使用接受的答案时,我注意到这也会改变轴极值点被剪裁的方式。有没有办法正确对齐刻度线和面板,但不能改变这种行为?我不想删除点,只是隐藏面板外的部分。

minimum working example

1 个答案:

答案 0 :(得分:6)

这不是关闭的位置,而是被裁剪的面板边框

library(ggplot2)
p <- ggplot(mtcars,aes(mpg, wt)) + geom_point() + scale_y_continuous(limits=c(1,5),expand=c(0,0))
p <- p + theme_bw()
p <- p + theme(axis.ticks=element_line(size=3),
               panel.border = element_rect(size = 3),
               axis.ticks.length = unit(0.5, "cm"))

g <- ggplotGrob(p)

g$layout$clip <- "off"
library(gridExtra)
grid.arrange(p, g, ncol=2)

enter image description here

编辑:上述观察并不是解决方案;如评论中所述,关闭整个面板的剪裁对于从面板区域泄漏的点是有问题的。一种可能的解决方法是在gtable中添加一个新的grob,例如通过从面板中提取它并将其添加到顶部而不会剪裁。

library(ggplot2)
p <- ggplot(mtcars,aes(mpg, wt)) + geom_point(size=20) + scale_y_continuous(limits=c(1,5),expand=c(0,0))
p <- p + theme_bw()
p <- p + theme(axis.ticks=element_line(size=2),
               panel.border = element_rect(size = 2),
               axis.ticks.length = unit(0.5, "cm"))

g <- ggplotGrob(p)
panel_id <- g$layout$name == "panel"
border <- tail(g$grobs[panel_id][[1]][["children"]], 1)
g <- gtable::gtable_add_grob(g, border, 
                             t = min(g$layout$t[panel_id]),
                             l = min(g$layout$l[panel_id]),
                             name = "border",
                             clip = "off")

library(gridExtra)
grid.arrange(p, g, ncol=2)