如何 jitter/remove 重叠 geom_text 标签
How to jitter/remove overlap for geom_text labels
在图中,是否可以稍微抖动状态缩写标签,使其不重叠?如果我使用 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")
你试过position=position_jitter()
了吗?您可以根据自己的选择调整 width
和 height
。
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))
只是想我会指出 ggrepel::geom_text_repel
会做你想要的。考虑到您示例中的某些文本已经与该行重叠,我认为您可能不喜欢 geom_label_repel
的 label
部分,因为它会放置在您的文本后面,阻塞线路。
使用你的例子:
ggplot(df) +
geom_text_repel(aes(x = huff_margin_dem,
y = margin16dem_state,
label = abbrev))
在图中,是否可以稍微抖动状态缩写标签,使其不重叠?如果我使用 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")
你试过position=position_jitter()
了吗?您可以根据自己的选择调整 width
和 height
。
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))
只是想我会指出 ggrepel::geom_text_repel
会做你想要的。考虑到您示例中的某些文本已经与该行重叠,我认为您可能不喜欢 geom_label_repel
的 label
部分,因为它会放置在您的文本后面,阻塞线路。
使用你的例子:
ggplot(df) +
geom_text_repel(aes(x = huff_margin_dem,
y = margin16dem_state,
label = abbrev))