График построения с PLOTLY - PullRequest
0 голосов
/ 04 апреля 2020

Это небольшой пример моего набора данных. Этот набор содержит еженедельные данные о 52 неделях. Вы можете увидеть данные с кодом ниже:

# 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

Таким образом, следующий крутой шаг - построить эти данные с помощью графика. Итак, вы можете увидеть, как мой график выглядит ниже:

enter image description here

Но я намерен сделать график похожим на график ниже. Я строю график в Excel, но я Мне нужен этот график с графиком. Самое главное, чтобы сравнивать только данные, которые одинаковы. Например, данные за 2020 год содержат данные о 16 неделях, и расчеты должны быть с тем же периодом 2019 года. Так что кто-нибудь может мне помочь об этой проблеме и построить это участок с сюжетом?

enter image description here

1 Ответ

2 голосов
/ 04 апреля 2020

Вам нужно добавить trace для каждого временного ряда, который вы хотите построить, и указать barmode в layout вашего `сюжетного графика. Никаких дополнительных манипуляций с данными не требуется, чтобы получить то, что вы хотите:

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'
  )

data.table часть не нужна - я сделал это просто, чтобы упростить имена столбцов и потому что я предпочитаю data.table для поднабора et c.

ВЫХОД

Приведенный выше код возвращает следующий график:

enter image description here

Вы можете Добавьте в свои данные только недели, для которых в обеих сериях есть данные для получения графика в вашем сообщении.

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

При желании вы можете переместить легенду вниз, указав legend в layout - мне приятнее читать по моему мнению:

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

Это дает вам:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...