简体   繁体   中英

Plot graph with PLOTLY

This is small example of my data set.This set contain weekly data about 52 weeks.You can see data with code below:

# CODE
 #Data

    ARTIFICIALDATA<-dput(structure(list(week = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 
    13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 
    29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 
    45, 46, 47, 48, 49, 50, 51, 52), `2019 Series_1` = c(534.771929824561, 
    350.385964912281, 644.736842105263, 366.561403508772, 455.649122807018, 
    533.614035087719, 829.964912280702, 466.035087719298, 304.421052631579, 
    549.473684210526, 649.719298245614, 537.964912280702, 484.982456140351, 
    785.929824561404, 576.736842105263, 685.508771929824, 514.842105263158, 
    464.491228070175, 608.245614035088, 756.701754385965, 431.859649122807, 
    524.315789473684, 739.40350877193, 604.736842105263, 669.684210526316, 
    570.491228070175, 641.649122807018, 649.298245614035, 664.210526315789, 
    530.385964912281, 754.315789473684, 646.80701754386, 764.070175438596, 
    421.333333333333, 470.842105263158, 774.245614035088, 752.842105263158, 
    575.368421052632, 538.315789473684, 735.578947368421, 522, 862.561403508772, 
    496.526315789474, 710.631578947368, 584.456140350877, 843.19298245614, 
    563.473684210526, 568.456140350877, 625.368421052632, 768.912280701754, 
    679.824561403509, 642.526315789474), `2020 Series_1` = c(294.350877192983, 
    239.824561403509, 709.614035087719, 569.824561403509, 489.438596491228, 
    561.964912280702, 808.456140350877, 545.157894736842, 589.649122807018, 
    500.877192982456, 584.421052631579, 524.771929824561, 367.438596491228, 
    275.228070175439, 166.736842105263, 58.2456140350878, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA)), row.names = c(NA, -52L), class = c("tbl_df", "tbl", 
    "data.frame")))


  # CODE WITH PLOTLY  
library(tidyverse)
library(plotly)
library(reshape2)
library(ggplot2)
library(dplyr)
ARTIFICIALDATA_rec <- ARTIFICIALDATA %>% 
  gather(key = Year_indicator, value = time_series_value, -1)


    ARTIFICIALDATA_rec$color <- factor(ARTIFICIALDATA_rec$Year_indicator, labels = c("royalblue", "orange")) 

    Chart <- plot_ly(ARTIFICIALDATA_rec, x = ~week , y = ~time_series_value,
                                 type = 'bar',
                                 marker = list(color = ~color), name = ~Year_indicator) %>%
      layout(title = "TEST",yaxis = list(title = 'Millions EUR '), barmode = 'stack')
    Chart<-ggplotly(Chart)

    Chart

So next steep is plot this data with plotly. So you can see how my plot look like below:

在此处输入图像描述

But my intention is to make plot like plot below.I plot in Excel but defently i need this plot with plotly.Most important thing is to compare only data which is same.For example data for 2020 contain data about 16 weeks and compratation must be with the same period of 2019. So can anybody help me about this problem and plot this plot with plotly?

在此处输入图像描述

You need to add a trace for each time series you want to plot and specify barmode in the layout of your `plotly plot. No additional data manipulation seems necessary to get what you want:

CODE

dat <- as.data.table(ARTIFICIALDATA)
colnames(dat) <- c('week', 'series1', 'series2')

plt <- plot_ly(dat) %>% 
  add_trace(x = ~week, y = ~series1, type = 'bar', name = '2019 Series 1') %>% 
  add_trace(x = ~week, y = ~series2, type = 'bar', name = '2020 Series 1') %>% 
  layout(
    xaxis = list(title = 'week'), 
    yaxis = list(title = ''),
    barmode = 'group'
  )

the data.table part is not necessary - I did that purely to get simpler column names and because I prefer data.table for subsetting etc.

OUTPUT

The above code returns the below plot:

在此处输入图像描述

You can subset your data to include only weeks for which both series have data to get the graph in your post.

plt <- plot_ly(dat[!is.na(series2)]) %>% 
   ...

Optionally, you can move the legend to the bottom by specifying the legend in layout - makes it nicer to read in my opinion:

layout(
    ... 
    legend = list(orientation = 'h')
)

This gives you:

在此处输入图像描述

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM