Я работаю над приложением, в котором мне нужно несколько раз развернуть столбчатую диаграмму. Ниже приведен воспроизводимый код:
library(shiny)
library(plotly)
library(shinyWidgets)
library(shinythemes)
library(dplyr)
df <- data.frame(Level1=c("Tax","Tax","Tax","Tax","Non Tax","Non Tax","Non Tax","GIA","GIA","GIA","GIA"),
Level2=c("GST","IT","Customs","GST","SS","GS","SS","Plan","Non_plan","Others","Others"),
Total=c(1000,10000,200,534,724,6451,8335,8635,999,855,6638))
dfcategories<-unique(df$Level1)
ui<- navbarPage(title=span("Drill Down",style= {"color: green;font-size:150%"}),
theme=shinytheme("spacelab"),
header = tagList(
useShinydashboard()
),
tabPanel("Bar Chart",
plotlyOutput("rrbar"), uiOutput("Back")
))
server<- function(input,output){
current_category<-reactiveVal()
rr1<-reactive({
if(!length(current_category()))
{
return(count(df, Level1, wt=Total ))
}
df %>%filter(Level1==current_category())%>% count(Level2,wt=Total)
})
output$rrbar<- renderPlotly({
d<-setNames(rr1(),c("x","y"))
print(d)
plot_ly(d) %>%
add_bars(x=~x,y =~y,color=~x)
})
observe({
cd<-event_data("plotly_click")$x
if(isTRUE(cd %in% dfcategories)) current_category(cd)
})
output$Back <- renderUI({
if (length(current_category()))
actionButton("clear", "Back", icon("chevron-left"))
})
observeEvent(input$clear, current_category(NULL))
}
shinyApp(ui,server)
Во время выполнения вышеуказанного кода он создает две гистограммы: 1. Первая гистограмма будет находиться между уровнем 1 против общей 2. При нажатии на любую категорию на уровне 1, вторая строка график будет между Уровнем 2 (ниже Уровня 1) 1 против Всего.
На втором графике только ось X должна иметь только Уровень 2 выбранного Уровня1. Но мой код выдает все категории уровня 2 независимо от уровня 1. Результат Drill down . Ось X должна иметь только SS и GS. Почему в нем есть все категории уровня 2 ??1010*
Где я ошибаюсь? Любая помощь? Заранее спасибо