Search code examples
rggplot2plotlytidyversedata-visualization

How to apply slope plot R code to another data


I have dataframe which represents sales by model within 2 different years. 'change' column stands for absolute change by models from 2020 to 2021 while 'chng.percent' measures this change in percentages. However, I am struggling to apply the given Code of slope plot to my data.

df <- data.frame (model  = c("A", "A", "B","B"),
                  year = c(2020,2021,2020,2021),
                  sale =c(105,190,110,180),
                  chang = c(85,NA,70,NA),
                  chng.percent = c(80.9,NA, 63.6,NA))

Expected outcome (Like this) enter image description here


Solution

  • Here's a way to do it all within ggplot using your existing data:

    ggplot(df, aes(year, sale, color = model)) +
      geom_line(arrow = arrow(type = "closed", angle = 20),
                key_glyph = draw_key_point) +
      geom_vline(aes(xintercept = year)) +
      geom_text(aes(label = sale, hjust = ifelse(year == 2020, 1.3, -0.3)), 
                color = "black", 
                size = 6) +
      geom_text(aes(x = min(df$year) + 0.25, y = 105,
               label = paste0("+", chang[1], "; ", chng.percent[1], "%"),
               color = "A"), size = 5) +
      geom_text(aes(x = max(df$year) - 0.25, y = 150,
               label = paste0("+", chang[3], "; ", chng.percent[3], "%"),
               color = "B"), size = 5) +
      theme_void(base_size = 16) +
      coord_cartesian(clip = "off") +
      scale_x_continuous(breaks = c(2020, 2021)) +
      guides(color = guide_legend(override.aes = list(size = 5))) +
      scale_color_brewer(palette = "Set1") +
      theme(plot.margin = margin(30, 30, 30, 30),
            aspect.ratio = 1.5,
            axis.text.x = element_text(size = 20))
    

    enter image description here