【问题标题】:Render a datatable after clicking on sections of multiple pie charts单击多个饼图的部分后渲染数据表
【发布时间】:2022-01-03 20:44:11
【问题描述】:

以下应用会打开一个数据框,其中显示与您单击的饼图部分相关的数据。这个应用程序目前仅适用于一个饼图,但我希望它适用于多个饼图。有什么办法吗?

library(shiny)
library(plotly)

df <- structure(list(V1 = c("PM00FQ01", "PM00GQ01", "PM00KQ02", "PM033Q01", "PM034Q01T", "PM155Q01", "PM155Q02D", "PM155Q03D", "PM155Q04T", "PM192Q01T", "PM273Q01T", "PM305Q01", "PM406Q01", "PM406Q02", "PM408Q01T", "PM411Q01", "PM411Q02", "PM420Q01T", "PM423Q01", "PM442Q02", "PM446Q01", "PM446Q02", "PM447Q01", "PM462Q01D", "PM464Q01T", "PM474Q01", "PM496Q01T", "PM496Q02", "PM559Q01", "PM564Q01", "PM564Q02", "PM571Q01", "PM603Q01T", "PM800Q01", "PM803Q01T", "PM828Q01", "PM828Q02", "PM828Q03", "PM903Q01", "PM903Q03", "PM905Q01T", "PM905Q02", "PM906Q01", "PM906Q02", "PM909Q01", "PM909Q02", "PM909Q03", "PM915Q01", "PM915Q02", "PM918Q01", "PM918Q02", "PM918Q05", "PM919Q01", "PM919Q02", "PM923Q01", "PM923Q03", "PM923Q04", "PM924Q02", "PM934Q01", "PM934Q02", "PM936Q01", "PM936Q02", "PM939Q01", "PM939Q02", "PM942Q01", "PM942Q02", "PM942Q03", "PM943Q01", "PM943Q02", "PM948Q01", "PM948Q02", "PM948Q03", "PM949Q01T", "PM949Q02T", "PM949Q03", "PM953Q02", "PM953Q03", "PM953Q04D", "PM954Q01", "PM954Q02", "PM954Q04", "PM955Q01", "PM955Q02", "PM955Q03", "PM957Q01", "PM957Q02", "PM957Q03", "PM961Q02", "PM961Q03", "PM961Q05", "PM967Q01", "PM967Q03T", "PM982Q01", "PM982Q02", "PM982Q03T", "PM982Q04", "PM985Q01", "PM985Q02", "PM985Q03", "PM991Q01", "PM991Q02D", "PM992Q01", "PM992Q02", "PM992Q03", "PM995Q01", "PM995Q02", "PM995Q03", "PM998Q02", "PM998Q04T"), V2 = c("space and shape", "space and shape", "space and shape", "space and shape", "space and shape", "change and relationships", "change and relationships", "change and relationships", "change and relationships", "change and relationships", "space and shape", "space and shape", "space and shape", "space and shape", "uncertainty and data", "quantity", "uncertainty and data", "uncertainty and data", "uncertainty and data", "quantity", "change and relationships", "change and relationships", "space and shape", "space and shape", "space and shape", "quantity", "quantity", "quantity", "quantity", "quantity", "uncertainty and data", "change and relationships", "quantity", "quantity", "uncertainty and data", "change and relationships", "uncertainty and data", "quantity", "change and relationships", "change and relationships", "quantity", "quantity", "quantity", "quantity", "quantity", "quantity", "change and relationships", "uncertainty and data", "change and relationships", "uncertainty and data", "uncertainty and data", "uncertainty and data", "quantity", "quantity", "quantity", "space and shape", "change and relationships", "quantity", "space and shape", "space and shape", "change and relationships", "change and relationships", "uncertainty and data", "uncertainty and data", "quantity", "change and relationships", "quantity", "change and relationships", "space and shape", "quantity", "quantity", "quantity", "space and shape", "space and shape", "space and shape", "uncertainty and data", "uncertainty and data", "uncertainty and data", "change and relationships", "change and relationships", "change and relationships", "uncertainty and data", "uncertainty and data", "uncertainty and data", "change and relationships", "change and relationships", "change and relationships", "change and relationships", "change and relationships", "uncertainty and data", "space and shape", "space and shape", "uncertainty and data", "uncertainty and data", "uncertainty and data", "uncertainty and data", "uncertainty and data", "quantity", "quantity", "space and shape", "space and shape", "space and shape", "space and shape", "change and relationships", "space and shape", "space and shape", "quantity", "change and relationships", "change and relationships"), V3 = c("Constructed Response Expert", "Constructed Response Manual", "Constructed Response Expert", "Simple Multiple Choice", "Constructed Response Auto-coded", "Constructed Response Expert", "Constructed Response Expert", "Constructed Response Expert", "Complex Multiple Choice", "Complex Multiple Choice", "Complex Multiple Choice", "Simple Multiple Choice", "Constructed Response Expert", "Constructed Response Expert", "Complex Multiple Choice", "Constructed Response Manual", "Simple Multiple Choice", "Complex Multiple Choice", "Simple Multiple Choice", "Constructed Response Manual", "Constructed Response Manual", "Constructed Response Expert", "Simple Multiple Choice", "Constructed Response Expert", "Constructed Response Auto-coded", "Constructed Response Manual", "Complex Multiple Choice", "Constructed Response Manual", "Simple Multiple Choice", "Simple Multiple Choice", "Simple Multiple Choice", "Simple Multiple Choice", "Complex Multiple Choice", "Simple Multiple Choice", "Constructed Response Auto-coded", "Constructed Response Expert", "Constructed Response Manual", "Constructed Response Manual", "Constructed Response Expert", "Constructed Response Manual", "Complex Multiple Choice", "Constructed Response Expert", "Simple Multiple Choice", "Constructed Response Expert", "Constructed Response Manual", "Simple Multiple Choice", "Constructed Response Expert", "Simple Multiple Choice", "Constructed Response Manual", "Simple Multiple Choice", "Simple Multiple Choice", "Simple Multiple Choice", "Constructed Response Manual", "Constructed Response Manual", "Simple Multiple Choice", "Simple Multiple Choice", "Constructed Response Expert", "Constructed Response Manual", "Constructed Response Manual", "Simple Multiple Choice", "Constructed Response Manual", "Constructed Response Expert", "Simple Multiple Choice", "Simple Multiple Choice", "Simple Multiple Choice", "Constructed Response Expert", "Constructed Response Manual", "Simple Multiple Choice", "Constructed Response Expert", "Simple Multiple Choice", "Constructed Response Manual", "Constructed Response Expert", "Complex Multiple Choice", "Complex Multiple Choice", "Constructed Response Expert", "Constructed Response Expert", "Constructed Response Manual", "Constructed Response Expert", "Constructed Response Manual", "Constructed Response Expert", "Constructed Response Expert", "Constructed Response Manual", "Constructed Response Expert", "Constructed Response Expert", "Simple Multiple Choice", "Simple Multiple Choice", "Constructed Response Manual", "Constructed Response Expert", "Simple Multiple Choice", "Constructed Response Expert", "Constructed Response Manual", "Complex Multiple Choice", "Constructed Response Manual", "Constructed Response Manual", "Complex Multiple Choice", "Simple Multiple Choice", "Simple Multiple Choice", "Simple Multiple Choice", "Constructed Response Manual", "Simple Multiple Choice", "Constructed Response Expert", "Constructed Response Manual", "Constructed Response Manual", "Constructed Response Expert", "Constructed Response Manual", "Constructed Response Expert", "Simple Multiple Choice", "Constructed Response Manual", "Complex Multiple Choice" ), V4 = c("Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Female voice", "Female voice", "Female voice", "Female voice", "Female voice", "Female voice", "Female voice", "Female voice", "Female voice", "Female voice", "Female voice", "Female voice", "Female voice", "Female voice", "Female voice", "Male/Female voice", "Male/Female voice", "Male/Female voice", "Male/Female voice", "Male/Female voice", "Male/Female voice", "Male/Female voice", "Male/Female voice", "Male/Female voice", "Male/Female voice", "Male/Female voice", "Male/Female voice", "Male/Female voice", "Male/Female voice", "Male/Female voice", "Male/Female voice", "Male/Female voice", "Male/Female voice", "Male/Female voice", "Male/Female voice", "Male/Female voice", "Male/Female voice", "Male/Female voice", "Male/Female voice", "Male/Female voice", "Male/Female voice", "Male/Female voice", "Male/Female voice", "Male/Female voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice")), class = "data.frame", row.names = c(NA, -109L ))

setDT(df)
dtnum <- df[ , .N, by="V3"]
dtnum2 <- df[ , .N, by="V2"]
ui <- fluidPage(
  
  plotlyOutput("myPlot"),
  plotlyOutput("myPlot2"),
  DTOutput("mydt")
  
)

server <- function(input, output, session) {
  
  observe({
    d <- event_data("plotly_click")
    print(d)
    if (is.null(d)) {
      df
    } else {
      output$mydt <- renderDT({
        df[V3 == d$customdata]
      })
    }
  })
  output$myPlot2 <- renderPlotly({
    plot_ly(dtnum2, labels = ~V2, values = ~N, type = 'pie', customdata = ~V2)
  }) 
  
  output$myPlot <- renderPlotly({
    plot_ly(dtnum, labels = ~V3, values = ~N, type = 'pie', customdata = ~V3)
  })
  
}

shinyApp(ui, server)

【问题讨论】:

标签: r shiny


【解决方案1】:

以下应该按预期工作。我正在使用reactiveValues 在数据集之间切换。请注意source 参数的使用。

PS:请不要像在示例中那样在观察者中嵌套 render* 函数。

library(shiny)
library(plotly)
library(data.table)
library(DT)

df <- structure(list(V1 = c("PM00FQ01", "PM00GQ01", "PM00KQ02", "PM033Q01",
"PM034Q01T", "PM155Q01", "PM155Q02D", "PM155Q03D", "PM155Q04T", "PM192Q01T",
"PM273Q01T", "PM305Q01", "PM406Q01", "PM406Q02", "PM408Q01T", "PM411Q01",
"PM411Q02", "PM420Q01T", "PM423Q01", "PM442Q02", "PM446Q01", "PM446Q02",
"PM447Q01", "PM462Q01D", "PM464Q01T", "PM474Q01", "PM496Q01T", "PM496Q02",
"PM559Q01", "PM564Q01", "PM564Q02", "PM571Q01", "PM603Q01T", "PM800Q01",
"PM803Q01T", "PM828Q01", "PM828Q02", "PM828Q03", "PM903Q01", "PM903Q03",
"PM905Q01T", "PM905Q02", "PM906Q01", "PM906Q02", "PM909Q01", "PM909Q02",
"PM909Q03", "PM915Q01", "PM915Q02", "PM918Q01", "PM918Q02", "PM918Q05",
"PM919Q01", "PM919Q02", "PM923Q01", "PM923Q03", "PM923Q04", "PM924Q02",
"PM934Q01", "PM934Q02", "PM936Q01", "PM936Q02", "PM939Q01", "PM939Q02",
"PM942Q01", "PM942Q02", "PM942Q03", "PM943Q01", "PM943Q02", "PM948Q01",
"PM948Q02", "PM948Q03", "PM949Q01T", "PM949Q02T", "PM949Q03", "PM953Q02",
"PM953Q03", "PM953Q04D", "PM954Q01", "PM954Q02", "PM954Q04", "PM955Q01",
"PM955Q02", "PM955Q03", "PM957Q01", "PM957Q02", "PM957Q03", "PM961Q02",
"PM961Q03", "PM961Q05", "PM967Q01", "PM967Q03T", "PM982Q01", "PM982Q02",
"PM982Q03T", "PM982Q04", "PM985Q01", "PM985Q02", "PM985Q03", "PM991Q01",
"PM991Q02D", "PM992Q01", "PM992Q02", "PM992Q03", "PM995Q01", "PM995Q02",
"PM995Q03", "PM998Q02", "PM998Q04T"), V2 = c("space and shape", "space and
shape", "space and shape", "space and shape", "space and shape", "change and
relationships", "change and relationships", "change and relationships",
"change and relationships", "change and relationships", "space and shape",
"space and shape", "space and shape", "space and shape", "uncertainty and
data", "quantity", "uncertainty and data", "uncertainty and data",
"uncertainty and data", "quantity", "change and relationships", "change and
relationships", "space and shape", "space and shape", "space and shape",
"quantity", "quantity", "quantity", "quantity", "quantity", "uncertainty and
data", "change and relationships", "quantity", "quantity", "uncertainty and
data", "change and relationships", "uncertainty and data", "quantity", "change
and relationships", "change and relationships", "quantity", "quantity",
"quantity", "quantity", "quantity", "quantity", "change and relationships",
"uncertainty and data", "change and relationships", "uncertainty and data",
"uncertainty and data", "uncertainty and data", "quantity", "quantity",
"quantity", "space and shape", "change and relationships", "quantity", "space
and shape", "space and shape", "change and relationships", "change and
relationships", "uncertainty and data", "uncertainty and data", "quantity",
"change and relationships", "quantity", "change and relationships", "space and
shape", "quantity", "quantity", "quantity", "space and shape", "space and
shape", "space and shape", "uncertainty and data", "uncertainty and data",
"uncertainty and data", "change and relationships", "change and
relationships", "change and relationships", "uncertainty and data",
"uncertainty and data", "uncertainty and data", "change and relationships",
"change and relationships", "change and relationships", "change and
relationships", "change and relationships", "uncertainty and data", "space and
shape", "space and shape", "uncertainty and data", "uncertainty and data",
"uncertainty and data", "uncertainty and data", "uncertainty and data",
"quantity", "quantity", "space and shape", "space and shape", "space and
shape", "space and shape", "change and relationships", "space and shape",
"space and shape", "quantity", "change and relationships", "change and
relationships"), V3 = c("Constructed Response Expert", "Constructed Response
Manual", "Constructed Response Expert", "Simple Multiple Choice", "Constructed
Response Auto-coded", "Constructed Response Expert", "Constructed Response
Expert", "Constructed Response Expert", "Complex Multiple Choice", "Complex
Multiple Choice", "Complex Multiple Choice", "Simple Multiple Choice",
"Constructed Response Expert", "Constructed Response Expert", "Complex
Multiple Choice", "Constructed Response Manual", "Simple Multiple Choice",
"Complex Multiple Choice", "Simple Multiple Choice", "Constructed Response
Manual", "Constructed Response Manual", "Constructed Response Expert", "Simple
Multiple Choice", "Constructed Response Expert", "Constructed Response
Auto-coded", "Constructed Response Manual", "Complex Multiple Choice",
"Constructed Response Manual", "Simple Multiple Choice", "Simple Multiple
Choice", "Simple Multiple Choice", "Simple Multiple Choice", "Complex Multiple
Choice", "Simple Multiple Choice", "Constructed Response Auto-coded",
"Constructed Response Expert", "Constructed Response Manual", "Constructed
Response Manual", "Constructed Response Expert", "Constructed Response
Manual", "Complex Multiple Choice", "Constructed Response Expert", "Simple
Multiple Choice", "Constructed Response Expert", "Constructed Response
Manual", "Simple Multiple Choice", "Constructed Response Expert", "Simple
Multiple Choice", "Constructed Response Manual", "Simple Multiple Choice",
"Simple Multiple Choice", "Simple Multiple Choice", "Constructed Response
Manual", "Constructed Response Manual", "Simple Multiple Choice", "Simple
Multiple Choice", "Constructed Response Expert", "Constructed Response
Manual", "Constructed Response Manual", "Simple Multiple Choice", "Constructed
Response Manual", "Constructed Response Expert", "Simple Multiple Choice",
"Simple Multiple Choice", "Simple Multiple Choice", "Constructed Response
Expert", "Constructed Response Manual", "Simple Multiple Choice", "Constructed
Response Expert", "Simple Multiple Choice", "Constructed Response Manual",
"Constructed Response Expert", "Complex Multiple Choice", "Complex Multiple
Choice", "Constructed Response Expert", "Constructed Response Expert",
"Constructed Response Manual", "Constructed Response Expert", "Constructed
Response Manual", "Constructed Response Expert", "Constructed Response
Expert", "Constructed Response Manual", "Constructed Response Expert",
"Constructed Response Expert", "Simple Multiple Choice", "Simple Multiple
Choice", "Constructed Response Manual", "Constructed Response Expert", "Simple
Multiple Choice", "Constructed Response Expert", "Constructed Response
Manual", "Complex Multiple Choice", "Constructed Response Manual",
"Constructed Response Manual", "Complex Multiple Choice", "Simple Multiple
Choice", "Simple Multiple Choice", "Simple Multiple Choice", "Constructed
Response Manual", "Simple Multiple Choice", "Constructed Response Expert",
"Constructed Response Manual", "Constructed Response Manual", "Constructed
Response Expert", "Constructed Response Manual", "Constructed Response
Expert", "Simple Multiple Choice", "Constructed Response Manual", "Complex
Multiple Choice" ), V4 = c("Male voice", "Male voice", "Male voice", "Male
voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice",
"Male voice", "Male voice", "Male voice", "Female voice", "Female voice",
"Female voice", "Female voice", "Female voice", "Female voice", "Female
voice", "Female voice", "Female voice", "Female voice", "Female voice",
"Female voice", "Female voice", "Female voice", "Female voice", "Male/Female
voice", "Male/Female voice", "Male/Female voice", "Male/Female voice",
"Male/Female voice", "Male/Female voice", "Male/Female voice", "Male/Female
voice", "Male/Female voice", "Male/Female voice", "Male/Female voice",
"Male/Female voice", "Male/Female voice", "Male/Female voice", "Male/Female
voice", "Male/Female voice", "Male/Female voice", "Male/Female voice",
"Male/Female voice", "Male/Female voice", "Male/Female voice", "Male/Female
voice", "Male/Female voice", "Male/Female voice", "Male/Female voice",
"Male/Female voice", "Male/Female voice", "Male/Female voice", "Male/Female
voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice",
"Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male
voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice",
"Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male
voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice",
"Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male
voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice",
"Male voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male
voice", "Male voice", "Male voice", "Male voice", "Male voice", "Male voice",
"Male voice", "Male voice", "Male voice", "Male voice")), class =
"data.frame", row.names = c(NA, -109L ))

setDT(df)
dtnumA <- df[ , .N, by="V3"]
dtnumB <- df[ , .N, by="V2"]

ui <- fluidPage(
  column(6, plotlyOutput("myPlotA")),
  column(6, plotlyOutput("myPlotB")),
  DTOutput("mydt")
)

server <- function(input, output, session) {
  
  reactiveVals <- reactiveValues(myPlotA_event_data = NULL, myPlotB_event_data = NULL)
  
  observe({
    reactiveVals$myPlotB_event_data <- NULL # reset
    reactiveVals$myPlotA_event_data <- event_data("plotly_click", source = "A")
  })
  
  observe({
    reactiveVals$myPlotA_event_data <- NULL # reset
    reactiveVals$myPlotB_event_data <- event_data("plotly_click", source = "B")
  })
  
  output$mydt <- renderDT({
    if(!is.null(reactiveVals$myPlotA_event_data)){
      df[V3 == reactiveVals$myPlotA_event_data$customdata]
    } else if(!is.null(reactiveVals$myPlotB_event_data)){
      df[V2 == reactiveVals$myPlotB_event_data$customdata]
    }
  })
  
  output$myPlotA <- renderPlotly({
    plot_ly(dtnumA, labels = ~V3, values = ~N, type = 'pie', customdata = ~V3, source = "A")
  })

  output$myPlotB <- renderPlotly({
    plot_ly(dtnumB, labels = ~V2, values = ~N, type = 'pie', customdata = ~V2, source = "B")
  }) 
    
}

shinyApp(ui, server)

【讨论】:

  • 感谢您的详细回答。我将通过这个例子
  • 在处理分层数据时还要检查 plotly 的 sunburst - event_data 可以用类似的方式捕获。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多