使用ggplot和geom_line跟踪体育统计数据

时间:2018-08-17 16:02:42

标签: r ggplot2

我有以下示例数据:

df <- tibble(
  "Player" = c("Ryan Ellis", "Dustin Byfuglien", "Ryan Suter", "Drew Doughty",
               "Ryan Ellis", "Dustin Byfuglien", "Ryan Suter", "Drew Doughty",
               "Ryan Ellis", "Dustin Byfuglien", "Ryan Suter", "Drew Doughty"),
  "CF_Perc" = c("60", "65", "63", "70",
                "55", "60", "70", "72",
                "52", "57", "59", "61"),
  "Season" = c("2016", "2016", "2016", "2016", 
               "2017", "2017", "2017", "2017",
               "2018", "2018", "2018", "2018")
 )

我想创建一个折线图,其中Season在x轴上,CF_Perc在y轴上。该图本身将跟踪给定年份中Player的所选统计信息(此处为CF_Perc)。这段代码创建了正确的设置,但是图中实际上没有内容:

ggplot(df, aes(Season, CF_Perc)) +
  geom_line(aes(fill = Player)) +
  geom_segment()

我应该改用geom_point,然后添加geom_segment吗?谢谢。


CF_Perf =玩家的Corsi For%

2 个答案:

答案 0 :(得分:3)

为Player添加分组和颜色似乎对我有用?

ggplot(df, aes(x = Season, y = CF_Perc, color = Player, group = Player)) +
  geom_line()

enter image description here

您需要指定一个组,因为x和y是变量。您可能应该重新考虑一下,然后像我一样将其转换为数字。

df$CF_Perc <- as.numeric(as.character(df$CF_Perc))
df$Season <- as.numeric(as.character(df$Season))

ggplot(df, aes(x = Season, y = CF_Perc, color = Player)) +
  geom_line()

答案 1 :(得分:1)

就像我上面所说的,这是一个很好的例子,说明了为什么您应该注意警告和错误,以帮助您进行一些简单的调试。运行您的代码,我在控制台中获得了两课:

library(tidyverse)

...

ggplot(df, aes(Season, CF_Perc)) +
  geom_line(aes(fill = Player)) +
  geom_segment()
#> Warning: Ignoring unknown aesthetics: fill
#> Error: geom_segment requires the following missing aesthetics: xend, yend

通过查看文档可以发现,geom_line具有美感color,而不是fill,正如警告所指出的那样。同样,?geom_segment显示xendyend是必需的。

我不确定这些细分的目标是什么,所以现在我放下它们,只照顾线条。首先,修复无效的美学(fill-> color),您会收到警告:

  

geom_path:每个组仅包含一个观察值。你需要调整吗   群体审美?

这是再次查看数据的提示,请注意您有两个数字列编码为字符。

str(df)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   12 obs. of  3 variables:
 $ Player : chr  "Ryan Ellis" "Dustin Byfuglien" "Ryan Suter" "Drew Doughty" ...
 $ CF_Perc: chr  "60" "65" "63" "70" ...
 $ Season : chr  "2016" "2016" "2016" "2016" ...

这可能不是您想要的,因为它使弄清楚如何绘制要连接连续点的东西变得很尴尬,例如geom_line / geom_path

因此,将这些列设为数字,即可设置:

df_numerics <- df %>%
  mutate_at(vars(CF_Perc, Season), as.numeric)

ggplot(df_numerics, aes(x = Season, y = CF_Perc)) +
  geom_line(aes(color = Player)) +
  scale_x_continuous(breaks = 2016:2018)

tl; dr:让R的警告和错误消息帮助您。