Plot graph with PLOTLY

隐身守侯 提交于 2020-05-17 06:56:20

问题


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 ?


回答1:


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:



来源:https://stackoverflow.com/questions/61029328/plot-graph-with-plotly

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!