Home > Back-end >  How to apply slope plot R code to another data
How to apply slope plot R code to another data

Time:05-13

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 enter image description here

CodePudding user response:

you can try something like this :

df <- data.frame(model  = c("A", "B"),
                 sale_2020 =c(105,110),
                 sale_2021 =c(190,180),
                  chang = c(85,70),
                  chng.percent = c(80.9, 63.6))

df %>%
  ggplot()  
  geom_segment(aes(x = 1, xend = 2, 
                   y = sale_2020, 
                   yend = sale_2021,
                   group = model,
                   col = model), 
               size = 1.2)  
  # set the colors
  scale_color_manual(values = c("#468189", "#9DBEBB"), guide = "none")   
  # remove all axis stuff
  theme_classic()   
  theme(axis.line = element_blank(),
        axis.text = element_blank(),
        axis.title = element_blank(),
        axis.ticks = element_blank())  
  geom_text(aes(x = x, y = y, label = label),
            data = data.frame(x = 1:2, 
                              y = 10   max(df$sale_2021),
                              label = c("2020", "2021")),
            col = "grey30",
            size = 6)  
  # add vertical lines that act as axis for 2020
  geom_segment(x = 1, xend = 1, 
               y = min(df$sale_2020) -10,
               yend = max(df$sale_2020)   81,
               col = "grey70", size = 1.5)  
  # add vertical lines that act as axis for 2021
  geom_segment(x = 2, xend = 2, 
               y = min(df$sale_2021) - 80,
               yend = max(df$sale_2021)   1,
               col = "grey70", size = 1.5)  
  # add the success rate next to each point on 2021 axis
geom_text(aes(x = 2   0.08, 
              y = sale_2021, 
              label = paste0(round(sale_2021, 1))),
          col = "grey30")  
  # add the success rate next to each point on 2021 axis
  geom_text(aes(x = 1 - 0.08, 
                y = sale_2020, 
                label = paste0(round(sale_2020, 1))),
            col = "grey30")  
  # add the success rate next to each point on 2020 axis
  geom_text(aes(x = 2 - 0.5, 
                y = c(156, 135), 
                label = paste0(round(chng.percent, 1), "%")),
            col = "grey30") 

CodePudding user response:

Here's a way to do it all within ggplot:

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 = 2020.25, y = 105,
           label = paste0(" ", chang[1], "; ", chng.percent[1], "%"),
           color = "A"), size = 5)  
  geom_text(aes(x = 2020.75, 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 = 2,
        axis.text.x = element_text(size = 20))

enter image description here

  • Related