如何从Shiny中的过滤数据创建条形图?

乌鸦R

在此示例中,条形图中始终使用“类型”和“期间”的第一个组合。无论选择哪种组合,始终都会绘制出类型A和期间01。我做错了什么?我猜想它一定是服务器中renderDataTable-part中的东西。

一个可重现的示例:

packages=c(
  'shiny', 'DT', 'shinyWidgets'
)

for (p in packages){
  if (!require(p, character.only=T)){          
    install.packages(p,dependencies = T)           
  }
  library(p, character.only=T)       
}

data <- expand.grid(c("A", "B", "C", "D"), c("01", "02", "03", "04", "05", "06"))
names(data) <- c("Type", "Period")
data <- data[order(data$Type, data$Period),]
data <- cbind(data,  "1970" = sample(c(1:100), dim(data)[1], rep = T),  "1971" = sample(c(1:100), dim(data)[1], rep = T))

ui <- basicPage(
  h2("Data"),
  pickerInput("Type",
              label=div(HTML("Select type:"),style="color:darkblue"),width="auto",
              choices=c("",unique(as.character(data$Type))),
              selected="",
              multiple=FALSE,
              options = list(
                `actions-box` = TRUE,
                `none-selected-text` = "No type selected",
                `selected-text-format` = paste0("count>",length(c("",unique(as.character(data$Type))))-1)
              ),
              choicesOpt = list(
                style = rep(("color:darkgreen; background: white; font-weight: bold;"),
                            length(c(unique(as.character(data$Type))))+1)
              )
  ),
  pickerInput("Period",
              label=div(HTML("Select period:"),style="color:darkblue"),width="auto",
              choices=c("",unique(as.character(data$Period))),
              selected="",
              multiple=FALSE,
              options = list(
                `actions-box` = TRUE,
                `none-selected-text` = "No period selected",
                `selected-text-format` = paste0("count>",length(c("",unique(as.character(data$Period))))-1)
              ),
              choicesOpt = list(
                style = rep(("color:darkgreen; background: white; font-weight: bold;"),
                            length(c(unique(as.character(data$Period))))+1)
              )
  ),
  DT::dataTableOutput("mydata"),
  plotOutput('plot1')
)

server <- function(input, output, session) {
  
  data <- data
  
  output$mydata = DT::renderDataTable({
    if (input$Type != "All the types") {
      data <- data[data$Type %in%  input$Type,]
    }
    else{data}
    
    if (input$Period != "All the periods") {
      data <- data[data$Period %in%  input$Period,]
    }
    else{data}
  })
  
  filtered_table <- reactive({
    req(input$mydata_rows_all)
    data[input$mydata_rows_all, ]
  })
  
  output$plot1 <- renderPlot({
    barplot(c(t(filtered_table()[,c("1970", "1971")])),
            col = rainbow(2),
            horiz = T,
            names.arg=c("1970", "1971"))
  })
}

shinyApp(ui, server)
罗纳克·沙(Ronak Shah)

试试这个代码:

  • 创建filtered_tablereactiveValues
  • 将检查更改为if(input$Type != "All the types")if (input$Type != "")因为没有Type值是"All the types"
  • 在显示图之前添加了一些检查。
library(shiny)
library(DT)
library(shinyWidgets)

data <- expand.grid(c("A", "B", "C", "D"), c("01", "02", "03", "04", "05", "06"))
names(data) <- c("Type", "Period")
data <- data[order(data$Type, data$Period),]
data <- cbind(data,  "1970" = sample(c(1:100), dim(data)[1], rep = T),  "1971" = sample(c(1:100), dim(data)[1], rep = T))

ui <- basicPage(
  h2("Data"),
  pickerInput("Type",
              label=div(HTML("Select type:"),style="color:darkblue"),width="auto",
              choices=c("",unique(as.character(data$Type))),
              selected="",
              multiple=FALSE,
              options = list(
                `actions-box` = TRUE,
                `none-selected-text` = "No type selected",
                `selected-text-format` = paste0("count>",length(c("",unique(as.character(data$Type))))-1)
              ),
              choicesOpt = list(
                style = rep(("color:darkgreen; background: white; font-weight: bold;"),
                            length(c(unique(as.character(data$Type))))+1)
              )
  ),
  pickerInput("Period",
              label=div(HTML("Select period:"),style="color:darkblue"),width="auto",
              choices=c("",unique(as.character(data$Period))),
              selected="",
              multiple=FALSE,
              options = list(
                `actions-box` = TRUE,
                `none-selected-text` = "No period selected",
                `selected-text-format` = paste0("count>",length(c("",unique(as.character(data$Period))))-1)
              ),
              choicesOpt = list(
                style = rep(("color:darkgreen; background: white; font-weight: bold;"),
                            length(c(unique(as.character(data$Period))))+1)
              )
  ),
  DT::dataTableOutput("mydata"),
  plotOutput('plot1')
)

server <- function(input, output, session) {
  
  filtered_table <- reactiveValues(data = NULL)
  
  output$mydata = DT::renderDataTable({
    if (input$Type != "") {
      data <- data[data$Type %in%  input$Type,]
    }
    else{data}
    
    if (input$Period != "") {
      data <- data[data$Period %in%  input$Period,]
    }
    else{data}
    
    filtered_table$data <- data
  })
  
  
  
  output$plot1 <- renderPlot({
    req(filtered_table$data, input$Type, input$Period)
    barplot(c(t(filtered_table$data[,c("1970", "1971")])),
            col = rainbow(2),
            horiz = T,
            names.arg=c("1970", "1971"))
  })
}

shinyApp(ui, server)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在python ggplot中创建条形图?

来自分类Dev

在R中创建分组的条形图

来自分类Dev

如何使用PhpExcel从MySQL数据创建条形图

来自分类Dev

如何在amCharts中创建分组的条形图?

来自分类Dev

如何使用json数据在d3.js中创建垂直分组的条形图?

来自分类Dev

R:如何从多列频率数据创建条形图?

来自分类Dev

如何从数据框创建条形图

来自分类Dev

如何创建此表的条形图

来自分类Dev

在Tableau中创建并排条形图

来自分类Dev

如何在Laravel中创建Google条形图查询?

来自分类Dev

从数据框创建堆叠的条形图

来自分类Dev

如何从数据框中绘制条形图

来自分类Dev

在R中创建正负条形图

来自分类Dev

如何在Arduino中创建IO条形图?

来自分类Dev

如何从Shiny中的过滤数据创建条形图?

来自分类Dev

如何用plotly创建条形图?

来自分类Dev

如何使用php数据变量创建条形图

来自分类Dev

如何使用JSON数据创建JasperReports条形图?

来自分类Dev

如何使用提供的数据创建条形图。精益求精

来自分类Dev

R:如何从多列频率数据创建条形图?

来自分类Dev

如何在R中创建条形图

来自分类Dev

如何为三组数据创建堆叠的条形图?

来自分类Dev

如何在matlab中创建条形图?

来自分类Dev

如何在Excel中创建带有数据点的条形图?

来自分类Dev

如何创建不等间距的条形图?

来自分类Dev

如何在 r 中创建条形图?

来自分类Dev

如何创建圆角条形图 vega

来自分类Dev

在 SwiftUI 中,如何为条形图创建动态矩形?

来自分类Dev

如何标准化数据并创建堆积条形图?