ggplot geom_text_repel文字超出绘图限制

时间:2019-09-20 12:32:48

标签: r ggplot2 ggrepel

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

enter image description here

带有强制20个构面和长标签的mtcar的示例:

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)

enter image description here

1 个答案:

答案 0 :(得分: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示例中,由于几何图形在逐个面板的基础上工作,排斥力无法防止延伸到相邻面板中的标签重叠。令人惊讶的是,另存为位图格式时,左侧会发生一些意外的裁剪,但保存为PDF时(至少在RStudio中)则不会。

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