Как использовать реактивный список с реактивным фреймом данных и R Highcharter в Shiny App - PullRequest
0 голосов
/ 05 января 2019

Я пишу блестящее приложение, которое будет отображать столбец HighChart of Payments по дате платежа, составленный по отделам. В нереактивной настройке это делается путем передачи набора данных в список, передачи списка в add_series_list в старшей строке и составления столбчатой ​​диаграммы с накоплением. В реактивном режиме это не создает график.

Это серверный вызов графика. Набор временных данных устанавливается из набора данных текущего месяца, группируется и суммируется.

Реактивный список данных создан. Это затем устанавливается через следующий бит кода. Я не ставил реактив (хотя пробовал с reactive({})) из-за:

https://shiny.rstudio.com/reference/shiny/1.0.5/reactiveValues.html

Последний бит должен выводить диаграмму и основан на:

Группировка столбцов в Highcharter без использования hchart ()

output$dailyRevenueChart = renderHighchart({

tempData <- reactive({
  currentMonthdata() %>%
    group_by(PaymentDate, LCO_Indicator) %>%
    summarise(GrossAmount = sum(GrossAmount))
})

data_list <- reactiveValues()

data_list <- 
  tempData() %>% 
    group_by(LCO_Indicator) %>% 
    do(data = list_parse2(.[, c('PaymentDate', 'GrossAmount')])) %>% 
    rename(name = LCO_Indicator) %>% 
    mutate(type = 'column') %>% 
    list_parse()


highchart() %>%
  hc_xAxis(categories = data$PaymentDate) %>%
  hc_add_series_list(isolate(data_list))%>%
  #hc_add_series_list(data_lst2)%>%
  hc_plotOptions(column = list(
    dataLabels = list(enabled = TRUE),
    stacking = "normal",
    enableMouseTracking = TRUE))

})

Вот пример набора данных:

currentMonthData <- tibble::tribble(
   ~PaymentDate,     ~LCO_Indicator, ~TransActionCount, ~Slaes,      ~SalesFreight, ~SalesTax, ~ServiceLabor, ~ServiceMaterials,   ~GrossAmount,
  "2019-01-01",       "Credit",                4L,            -189,             0,      -3.6,             0,                 0,   -192.6,
  "2019-01-01",    "Equipment",                9L,           12286,             0,    250.66,             0,                 0, 12536.66,
  "2019-01-01",   "Equipment",                2L,             9.9,             0,         0,             0,                 0,      9.9,
  "2019-01-02",   "Supply",                2L,             658,             0,     39.48,             0,                 0,   697.48,
  "2019-01-02", "Supply",              190L,               0,             0,         0,       9523.62,            2287.9, 12269.38,
  "2019-01-02",       "Equipment",               76L,        26682.18,              5,   1274.05,             0,                 0, 24639.73
    )

Раздел пользовательского интерфейса:

fluidRow(
  column(12,

         tabsetPanel(type = "tabs",
                     tabPanel("Daily Revenue",     highchartOutput("dailyRevenueChart"))

         )

  ) 

Я ожидаю, что в интерфейсе пользователя будет выведен столбец старшей диаграммы с накоплением. Я проверил базовую диаграмму в выходных данных, чтобы убедиться, что компоненты пользовательского интерфейса настроены правильно.

1 Ответ

0 голосов
/ 09 января 2019

Работая с этой настройкой, я нашел ответ на основной вопрос по этой теме.

В области пользовательского интерфейса модуля старшей диаграмме не предшествовал компонент ns для модуля.

Правильная строка интерфейса должна быть:

tabPanel("Daily Revenue", highchartOutput(ns("dailyRevenueChart")))

Вы заметите, что ns инкапсулирует имя highchartOutput. Стекирование неверно, но вопрос о том, почему он не отображается, теперь исправлен.

...