我有一个运动员的数据和他们所扮演的位置,每场比赛的四分之一。每个季度最多20分钟。
我希望通过此玩家绘制每个位置所花费的时间,并根据位置更改颜色。我的问题是similar to this one,因此我使用geom_rect
中的ggplot2
代码。
我的数据的一个例子是:
# Sample data.frame
df <- data.frame(Time=c(0, 5.35, 19.26, 23.32,
9.08, 13.11, 0, 0,
7.36, 2.51, 6.44, 22.47,
0, 24.38, 11.36),
Athlete = c('Paul', 'Paul', 'Paul', 'Paul',
'Paul', 'Paul', 'Paul','Paul',
'Paul', 'Paul', 'Paul','Paul',
'Paul', 'Paul', 'Paul'),
Quarter = c('Q1', 'Q1', 'Q1', 'Q1',
'Q2', 'Q2', 'Q2', 'Q3',
'Q3', 'Q3', 'Q4', 'Q4',
'Q4', 'Q4', 'Q4'),
Position = c('Bench','Defender','Bench','Defender',
'Bench','Defender','Defender','Defender',
'Defender','Bench','Bench','Bench',
'Defender', 'Defender', 'Defender'))
我在比赛中加上他们的排名值50,并随着时间的推移绘制这个。我用来做这个的代码是:
# Add in necessary column
df$Value <- c(50)
# Plot
ggplot(df, aes(x = Time, y = Value)) +
geom_rect(aes(NULL, NULL,
xmin=Time, xmax=30,
ymin=0, ymax=50,
fill = Position)) +
scale_y_continuous(expand = c(0, 0), limits = c(0, 50)) +
scale_x_continuous(expand = c(0, 0), limits = c(0, 30)) +
theme_classic() +
theme(legend.position = "none",
axis.title.x = element_blank(),
axis.title.y = element_blank(),
axis.text.y = element_blank(),
axis.text.x = element_text(face = "bold", colour = "black", size = 10),
axis.ticks.y = element_blank(),
axis.line.y = element_blank(),
panel.spacing = unit(1.5, "lines"),
strip.text = element_text(color = "black", size = 12, face = "bold")) +
facet_wrap(~ Quarter, nrow = 1)
然而,当运动员在第2季和第4季进行替补时,情节没有显示正确的颜色。例如,保罗在第2季开始担任后卫,然后以9.08的身份进入替补,然后从13.11开始担任后卫。分钟。 Q2不是每种颜色显示这段时间,而是全部为蓝色。
我为geom_rect
输入了错误的代码吗?
答案 0 :(得分:0)
我可以通过简单地重新排序数据帧来获得所需的绘图,以便时间是连续的。我使用下面的代码完成了这个,它创建了所需的图:
# Order data.frame
attach(df)
df <- df[order(Athlete, Quarter, Time),]
# Re-plot
ggplot(df, aes(x = Time, y = Value)) +
geom_rect(aes(NULL, NULL,
xmin=Time, xmax=30,
ymin=0, ymax=50,
fill = Position)) +
scale_y_continuous(expand = c(0, 0), limits = c(0, 50)) +
scale_x_continuous(expand = c(0, 0), limits = c(0, 30)) +
theme_classic() +
theme(legend.position = "bottom",
axis.title.x = element_blank(),
axis.title.y = element_blank(),
axis.text.y = element_blank(),
axis.text.x = element_text(face = "bold", colour = "black", size = 10),
axis.ticks.y = element_blank(),
axis.line.y = element_blank(),
panel.spacing = unit(1.5, "lines"),
strip.text = element_text(color = "black", size = 12, face = "bold")) +
facet_wrap(~ Quarter, nrow = 1)