根据因素改变背景,不在ggplot2中工作

时间:2017-03-18 05:37:20

标签: r ggplot2

我有一个运动员的数据和他们所扮演的位置,每场比赛的四分之一。每个季度最多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输入了错误的代码吗?

1 个答案:

答案 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)