在刻度线结束的位置和面板开始的位置之间似乎总有一些小而明显的偏移.
当指定轴限制以使轴以刻度线结束时(见上文),这一点更为明显.例如,在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
我怎样才能解决这个问题?
编辑:
在我自己的数据上使用接受的答案时,我注意到这也改变了轴极值点被剪裁的方式.有没有办法正确对齐刻度线和面板,但不能改变这种行为?我不想删除这些点,只是隐藏了面板外的部分.
这不是关闭的位置,而是被剪裁的面板边框,
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)
Run Code Online (Sandbox Code Playgroud)
编辑:上述观察并不是解决方案; 如评论中所述,关闭整个面板的剪裁对于从面板区域泄漏的点是有问题的.一种可能的解决方法是在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)
Run Code Online (Sandbox Code Playgroud)