Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Create a grouped bar chart with dates that are displayed as many times as they exist in date column of my dataframe

I need to create a grouped bar chart with traffic.sp and traffic.sp2 as the groups with different color. Also I need all the dates that exist more than once in my dataframe like "2020-06-26" to be displayed as many times they exist in the x-axis of plot and not just once.

date = c("2020-02-06", "2020-11-21", "2019-10-26", 
         "2020-09-20", "2020-01-11", "2019-09-15", "2020-08-03", "2019-02-05", 
         "2018-05-18", "2020-01-20", "2020-01-29", "2019-04-15", "2019-06-27", 
         "2017-11-29", "2017-12-01", "2019-04-04", "2017-11-28", "2018-11-29", 
         "2020-06-26", "2020-06-26") 
traffic.sp = c("28", "28", "20", 
                                                     "20", "22", "36", "36", "29", "0", "22", "23", "28", "28", "37", 
                                                     "26", "15", "39", "38", "22", "22")
traffic.sp2 = c("28", "28", "20", 
               "20", "22", "36", "36", "29", "0", "22", "23", "28", "28", "37", 
               "26", "15", "39", "38", "22", "22")
accident.description=c("right lane blocked", 
                       "two lanes blocked", "two lanes blocked", "right lane blocked", 
                       "right lane blocked", "one lane blocked", "right and center lane blocked", 
                       "right lane blocked", "road closed", "two lanes blocked", "right lane blocked", 
                       "right lane blocked", "one lane blocked", "right lane blocked", 
                       "right lane blocked", "right lane blocked", "right lane blocked", 
                       "two lanes blocked", "two lanes blocked", "two lanes blocked"
)
df<-data.frame(date,traffic.sp,traffic.sp2,accident.description)

fig <- plot_ly(df, x = ~date, y = ~traffic.sp, type = 'bar', name = 'traffic.sp',
               hovertext = paste(
                 "<br>Date :",
                 df$date,
                 "<br>accident description :",
                 df$accident.description,
                 paste("<br> traffic.sp:"),
                 df$traffic.sp
               ),
               hoverinfo = "text" )
fig <- fig %>% add_trace(y = ~traffic.sp2, name = 'traffic.sp2',
                         
                         hovertext = paste(
                           "<br>Date :",
                           df$date,
                           "<br>accident description :",
                           df$accident.description,
                           paste("<br> traffic.sp:"),
                           df$traffic.sp2
                         ),
                         hoverinfo = "text")
fig <- fig %>% layout(yaxis = list(title = 'Traffic speed'), barmode = 'group')

fig    

>Solution :

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

You could do it this way where you are basically de-duplicating any duplicated dates by adding a trailing space to every subsequent duplicate.

library(tidyverse)
library(plotly)
#> 
#> Attaching package: 'plotly'
#> The following object is masked from 'package:ggplot2':
#> 
#>     last_plot
#> The following object is masked from 'package:stats':
#> 
#>     filter
#> The following object is masked from 'package:graphics':
#> 
#>     layout
date = c("2020-02-06", "2020-11-21", "2019-10-26", 
         "2020-09-20", "2020-01-11", "2019-09-15", "2020-08-03", "2019-02-05", 
         "2018-05-18", "2020-01-20", "2020-01-29", "2019-04-15", "2019-06-27", 
         "2017-11-29", "2017-12-01", "2019-04-04", "2017-11-28", "2018-11-29", 
         "2020-06-26", "2020-06-26") 
traffic.sp = c("28", "28", "20", 
               "20", "22", "36", "36", "29", "0", "22", "23", "28", "28", "37", 
               "26", "15", "39", "38", "22", "22")
traffic.sp2 = c("28", "28", "20", 
                "20", "22", "36", "36", "29", "0", "22", "23", "28", "28", "37", 
                "26", "15", "39", "38", "22", "22")
accident.description=c("right lane blocked", 
                       "two lanes blocked", "two lanes blocked", "right lane blocked", 
                       "right lane blocked", "one lane blocked", "right and center lane blocked", 
                       "right lane blocked", "road closed", "two lanes blocked", "right lane blocked", 
                       "right lane blocked", "one lane blocked", "right lane blocked", 
                       "right lane blocked", "right lane blocked", "right lane blocked", 
                       "two lanes blocked", "two lanes blocked", "two lanes blocked"
)
df<-data.frame(date,traffic.sp,traffic.sp2,accident.description)

df <- df %>% 
  arrange(date) %>% 
  mutate(date2 = case_when(date == lag(date) ~ paste(date, " ", sep=""), TRUE ~ date), 
         fac = as.factor(date2))


fig <- plot_ly(df, x = ~fac, y = ~traffic.sp, type = 'bar', name = 'traffic.sp',
               hovertext = paste(
                 "<br>Date :",
                 df$date,
                 "<br>accident description :",
                 df$accident.description,
                 paste("<br> traffic.sp:"),
                 df$traffic.sp
               ),
               hoverinfo = "text" )
fig <- fig %>% add_trace(y = ~traffic.sp2, name = 'traffic.sp2',
                         
                         hovertext = paste(
                           "<br>Date :",
                           df$date,
                           "<br>accident description :",
                           df$accident.description,
                           paste("<br> traffic.sp:"),
                           df$traffic.sp2
                         ),
                         hoverinfo = "text")
fig <- fig %>% layout(yaxis = list(title = 'Traffic speed'), barmode = 'group')

#fig  

Created on 2022-02-01 by the reprex package (v2.0.1)

enter image description here

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading