我有以下示例数据:
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%
答案 0 :(得分:3)
为Player添加分组和颜色似乎对我有用?
ggplot(df, aes(x = Season, y = CF_Perc, color = Player, group = Player)) +
geom_line()
您需要指定一个组,因为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
显示xend
和yend
是必需的。
我不确定这些细分的目标是什么,所以现在我放下它们,只照顾线条。首先,修复无效的美学(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的警告和错误消息帮助您。