比较年度收入

时间:2017-09-22 20:42:38

标签: r ggplot2

我正在尝试创建一个比较年度收入的情节,但我无法让它发挥作用而且不明白为什么。

考虑我的df:

 df <- data.frame(date = seq(as.Date("2016-01-01"), as.Date("2017-10-01"), by = "month"),
                 rev = rnorm(22, 150, sd = 20))

    df %>% 
      separate(date, c("Year", "Month", "Date")) %>% 
      filter(Month <= max(Month[Year == "2017"])) %>% 
      group_by(Year, Month) %>% 
      ggplot(aes(x = Month, y = rev, fill = Year)) + 
      geom_line()
geom_path: Each group consists of only one observation. Do you need to adjust the group aesthetic?

我真的不明白为什么这不起作用。我想要的是从1月到10月的两条线。

2 个答案:

答案 0 :(得分:1)

这应该适合你:

library(tidyverse)
df <- data.frame(date = seq(as.Date("2016-01-01"), as.Date("2017-10-01"), by = "month"),
                 rev = rnorm(22, 150, sd = 20))

df %>% 
  separate(date, c("Year", "Month", "Date")) %>% 
  filter(Month <= max(Month[Year == "2017"]))  %>%
  ggplot(aes(x = Month, y = rev, color = Year, group = Year)) + 
  geom_line()

这只是由于变量类型而出错的分组,如果你使用lubridate作为日期(也是一个整齐的包),这可能是有用的。

library(lubridate)
df %>% 
  mutate(Year = as.factor(year(date)), Month = month(date)) %>% 
  filter(Month <= max(Month[Year == "2017"])) %>% 
  ggplot(aes(x = Month, y = rev, color = Year)) + 
  geom_line()

答案 1 :(得分:0)

我认为ggplot2很困惑,因为它无法识别Month列的格式,在这种情况下,这是一个字符。尝试将其转换为数字:

... +
ggplot(aes(x = as.numeric(Month), y = rev, colour = Year)) +
....

请注意,我将fill替换为colour,我认为这对此图表更有意义:

sample output

顺便说一下,我不确定group_by语句是否添加任何内容。无论有没有,我都会得到相同的图表。