Search code examples
rggplot2timeserieschart

ggplot2 overlayed line chart by year?


Starting with the following dataset:

  $ Orders,Year,Date
  1608052.2,2019,2019-08-02
  1385858.4,2018,2018-07-27
  1223593.3,2019,2019-07-25
  1200356.5,2018,2018-01-20
  1198226.3,2019,2019-07-15
  837866.1,2019,2019-07-02

Trying to make a similar format as: enter image description here

with the criteria: X-axis will be days or months, y-axis will be sum of Orders, grouping / colors will be by year.

Attempts:

1) No overlay

dataset %>%
ggplot( aes(x=`Merge Date`, y=`$ Orders`, group=`Merge Date (Year)`, color=`Merge Date (Year)`)) +
geom_line()

2) ggplot month grouping

dataset %>%
 mutate(Date = as.Date(`Date`) %>%
 mutate(Year = format(Date,'%Y')) %>%
 mutate(Month = format(Date,'%b')) -> dataset2

 ggplot(data=dataset2, aes(x=Month, y=`$ Orders`, group=Year, color=factor(Year))) + 
 geom_line(size=.75) + 
 ylab("Volume")

Solution

  • The lubridate package is your answer. Extract month from the Date field and turn it into a variable. This code worked for me:

    library(tidyverse)
    library(lubridate)
    
    dataset <- read_delim("OrderValue,Year,Date\n1608052.2,2019,2019-08-02\n1385858.4,2018,2018-07-27\n1223593.3,2019,2019-07-25\n1200356.5,2018,2018-01-20\n1198226.3,2019,2019-07-15\n837866.1,2019,2019-07-02", delim = ",")
    dataset <- dataset %>%
      mutate(theMonth = month(Date))
    
    
    ggplot(dataset, aes(x = as.factor(theMonth), y = OrderValue, group = as.factor(Year), color = as.factor(Year))) + 
      geom_line()