如何抖动/删除geom_text标签的重叠

时间:2016-11-11 06:56:29

标签: r ggplot2 geom-text

Figure

在图中,是否可以略微抖动状态缩写标签,使它们不重叠?如果我使用check_overlap = TRUE,那么它会删除一些重叠的观察,我不希望这样。我也不想要geom_label_repel,因为它有标签伸出并穿过我所包含的45度线(我不想发生)

以下是我的代码的相关部分供参考:

ggplot(df, aes(x = huff_margin_dem, y = margin16dem_state, label = abbrev)) +
  geom_abline(intercept = 0) +
  geom_text(fontface = "bold")

2 个答案:

答案 0 :(得分:11)

你试过position=position_jitter()吗?您可以根据自己的选择调整widthheight

ggplot(df, aes(x = huff_margin_dem, y = margin16dem_state, label = abbrev)) +
  geom_abline(intercept = 0) +
  geom_text(fontface = "bold",position=position_jitter(width=1,height=1))

修改 仅操纵某个标签的示例

+geom_text(fontface = "bold",
position=position_jitter(width=ifelse(df$abbrev=='KS',1,0),
      height=ifelse(df$abbrev=='KS',1,0)))

或多个标签

df$jit<-with(df, ifelse(abbrev == "KS" | abbrev == "LA", 1, 2))

+geom_text(fontface = "bold",
    position=position_jitter(width=df$jit,height=df$jit))

答案 1 :(得分:5)

仅以为我会指出ggrepel::geom_text_repel会满足您的要求。考虑到示例中的某些文本已经与该行重叠,因此我认为您可能不喜欢label的{​​{1}}部分,因为背景会放置在文本后面,阻塞线。

使用您的示例:

geom_label_repel