Как использовать реактивный список с реактивным фреймом данных и R Highcharter в Shiny App
Я пишу блестящее приложение, которое будет создавать столбец 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 ответ
Работая с этой настройкой, я нашел ответ на основной вопрос по этому вопросу.
В области пользовательского интерфейса модуля старшей диаграмме не предшествовал компонент ns для модуля.
Правильная строка интерфейса должна быть:
tabPanel("Daily Revenue", highchartOutput(ns("dailyRevenueChart")))
Вы заметите, что ns инкапсулирует имя highchartOutput. Составление не является правильным, но вопрос, почему это не появляется, теперь исправлен.