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

m2xkgtsf  于 2023-03-20  发布在  其他
关注(0)|答案(2)|浏览(167)

在刻度线结束的地方和面板开始的地方之间似乎总是有一些小而明显的偏移。

当指定轴限制,使轴在刻度上结束时(见上文),这一点更加明显。* 例如,* 在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

我该怎么补救呢?

编辑:

在我自己的数据上使用接受的答案时,我注意到这也改变了轴极值点被剪切的方式。有什么方法可以正确地对齐刻度和面板,但不改变这种行为吗?我不想 * 删除 * 这些点,只是仍然隐藏面板外的部分。

wnrlj8wa

wnrlj8wa1#

关闭的不是位置,而是面板边框,

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)

编辑:上面的观察并不是一个解决方案;正如注解中所指出的,关闭整个面板的裁剪对于面板区域外的点来说是有问题的。一个可能的解决方法是添加一个新的grob到gtable,例如,从面板中提取它并将其添加到顶部而不进行裁剪。

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)
czq61nw1

czq61nw12#

使用coord_cartesian(clip = "off")关闭剪裁更简单

library(ggplot2)

ggplot(mtcars,aes(mpg, wt)) + 
  geom_point() + 
  scale_y_continuous(limits=c(1,5), expand=c(0,0)) +
  coord_cartesian(clip = "off") +
  theme_classic()
#> Warning: Removed 3 rows containing missing values (`geom_point()`).

创建于2023年3月18日,使用reprex v2.0.2

相关问题