1

当标签接近绘图边界时,如何防止 geom_text_repel() 显示部分标签。这是一个带有 facet_grid 的示例,例如在 chr3 facet 中,顶部“ZNF717”的标签未完全显示。

在此处输入图像描述

具有强制 20 个面和长标签的 mtcars 示例:

mtcars %>% 
rowwise() %>% 
mutate(label="test_label") %>% 
mutate(facet=runif(n = n(),min = 1,max=20)) %>% 
ggplot(aes(x=disp,y=hp,label=label)) + 
geom_text_repel() + 
facet_grid(~facet)

在此处输入图像描述

4

1 回答 1

0

每个面板都是独立的,默认情况下,绘图仅限于绘图区域。这可以通过修改默认坐标来覆盖。在这个极端的例子中,需要使用带有两行的 facet_wrap()。我还减小了标签的字体大小,并限制了排斥力,使其仅垂直移动标签。(显然,在实际使用中需要进一步调整标签和面板名称。)

library(ggplot2)
library(ggrepel)
library(dplyr)
mtcars %>% 
  rowwise() %>% 
  mutate(label="test_label") %>% 
  mutate(facet=runif(n = n(),min = 1,max=20)) %>% 
  ggplot(aes(x=disp,y=hp,label=label)) + 
  geom_text_repel(direction = "y", hjust = 0.5, size = 2) + 
  facet_wrap(~facet, nrow = 2) +
  coord_cartesian(clip = "off")

上面的代码回答了这个问题,但至少在mtcars示例中产生了一个新问题,因为 geoms 在逐个面板的基础上工作,排斥不能防止延伸到相邻面板的标签重叠。令人惊讶的是,在保存为位图格式时会在左侧发生一些意外剪辑,但在保存为 PDF 时不会(至少在 RStudio 中)。

angle另一种选择是通过使用美学旋转标签或缩写用于标签的文本来确保标签适合可用空间。

于 2019-09-20T19:04:06.560 回答