我想用几个具有相同标签的点来注解散点图。我想标记所有的点(而不仅仅是其中的一部分),但是有这么多冗余标签会很混乱。有没有办法用ggrepel::geom_text_repel让一个标签指向所有具有相同标签的点?
我附上最简单的可能情况:
df <- data.frame(
group = c("A", "A", "B", "B"),
x = c(1, 2, 3, 4),
y = c(2, 3, 4, 5)
)
ggplot(df, aes(x, y)) +
geom_point() +
geom_text_repel(data=df, aes(label=group), box.padding = 0.5, force = 4)
字符串
现在:x1c 0d1x
我想要的:
PS:@user2862862在2019年发布了同样的问题,但在One label for multiple points中没有正确的答案
1条答案
按热度按时间hc8w905p1#
这里有一个方法来实现你想要的。然而,正如@AllanCameron在评论中提到的,这种方法的适当性 * 严重 * 依赖于数据。我已经包括了额外的例子来说明潜在的问题。
该方法包括计算每个组的平均xy,然后再创建两个三角形:一个用于线(df 1),一个用于标签(df 2):
字符串
现在考虑这两个其他的示例框架:
型
x1c 0d1x的数据
Example 1和Example 2看起来不错,但您提出的方法不能很好地扩展像Example 3这样的数据。每个组的线交叉,这使得解释变得困难。如果您的完整数据更复杂,并且包含很多像Example 3这样的点,使用颜色(或形状)在传达数据中发生的事情方面要有效得多:
型
的