gpt4 book ai didi

r - 如何减少 geom_text 重叠

转载 作者:行者123 更新时间:2023-12-01 13:36:22 24 4
gpt4 key购买 nike

我的数据集包含超过 500 次对不同地点的运动员进行的比赛事件的观察,并记录了一场足球比赛的持续时间。下面是我的数据集的一个示例,其中每个符号都代表一个匹配事件。例如,KE 是 Kick Effective,记录在 Defense 中的 1 分钟。

# Example data
df <- data.frame(Symbol = c('KE', 'TE', 'TE', 'TI',
'KE', 'KE', 'H', 'H',
'GS', 'KE', 'TE', 'H',
'KE', 'H', 'H', 'GS'),
Location = c('Defense', 'Defense', 'Midfield', 'Forward',
'Forward', 'Midfield', 'Midfield', 'Defense',
'Defense', 'Defense', 'Forward', 'Midfield',
'Midfield', 'Defense', 'Defense', 'Midfield'),
Time = c(1, 2, 3, 6,
15, 16, 16, 20,
22, 23, 26, 26,
27, 28, 28, 30))

我希望通过绘制 ggplot2 中每个位置随时间变化的匹配事件来可视化此数据。

# Load required package
require(ggplot2)
# Order factors for plotting
df$Location <- factor(df$Location, levels = c("Defense", "Midfield", "Forward"))

# Plot
ggplot(df, x = Time, y = Location) +
geom_text(data=df,
aes(x = Time, y = Location,
label = Symbol), size = 4) +
theme_classic()

但是,一些 geom_text 标签彼此重叠。我试过 jitter 但后来我失去了在足球场上发生事件的意义。不幸的是,check_overlap=TRUE 删除了所有重叠的符号。我希望符号保持相同的文本方向。

虽然符号是在它们出现时绘制的,但我很乐意稍微调整时间(意识到它们将不再完全对齐在绘图上)以确保 geom_text 符号可见。我可以通过向前或向后移动每个重叠事件的 Time 来手动执行此操作,但是对于如此大的数据集,这将花费很长时间。

一个建议是使用 ggrepel 我在下面做了这个,尽管它改变了 y 轴上的 geom_text 这不是我想要的。

library(ggrepel)
ggplot(df, x = Time, y = Location) +
geom_text_repel(aes(Time, Location, label = Symbol))

有没有一种方法可以检查重叠并自动调整符号,以确保它们可见并且仍然在 y 轴上保留意义?也许一种解决方案是找到每个 Location,如果 Symbol 在同一 Location 中与另一个 Symbol 相距不到两分钟,则 Time 已调整。

如有任何帮助,我们将不胜感激。

最佳答案

我们可以添加点,然后使用具有最小行长度的 ggrepel 来点文本标签。

library(ggrepel) # ggrepel_0.6.5 ggplot2_2.2.1

ggplot(df, aes(x = Time, y = Location, label = Symbol)) +
geom_point() +
geom_text_repel(size = 4, min.segment.length = unit(0.1, "lines")) +
theme_classic()

enter image description here或者我们可以尝试使用带有 "direction" 的开发版本争论。

ggplot(df, aes(x = Time, y = Location, label = Symbol)) +
geom_text_repel(size = 4, direction = "x") +
theme_classic()

关于r - 如何减少 geom_text 重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42949875/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com