是否有可能实现与多个分类轴的Shiny情节交互?

问题描述 投票:2回答:1

我正在创建我的第一个Shiny应用程序,当用户使用鼠标事件与ggplot对象(plot)交互时返回数据表。使用来自RStudio的this example,我已经能够根据x轴(切割)上的位置生成过滤并返回数据表(菱形)的东西。它差不多......但是,我有两个我无法解决的突出问题:

  1. 是否可以根据鼠标事件返回数据表,该事件由y轴(颜色)和x轴(切割)过滤?
  2. 从(1)开始,数据表是否可以进一步过滤,以便只返回该方面的信息(类型)?

这是我使用可重现代码的地方:

library(shiny)
library(dplyr)
library(ggplot2)

ui <- fluidPage(
  fluidRow(
    plotOutput("plot1", click = "plot1_click")),
  fluidRow(column(width = 10, dataTableOutput("selected_rows"))))

server <- function(input, output) {

  is.even <- function(x) x %% 2 == 0

  plot <- diamonds %>%
    mutate(cut = as.factor(cut)) %>%
    mutate(colour = as.factor(color)) %>%
    mutate(type = is.even(price)) %>%
    group_by(type, color, cut) %>%
    count()

  output$plot1 <- renderPlot({
    ggplot(plot, aes(x = cut, y = color, colour = type)) +
      geom_point(aes(size = n)) +
      facet_grid(~type) +
      theme(legend.position = "none")
  })

  output$selected_rows <- renderDataTable({
    if (is.null(input$plot1_click$x)) return()

    keeprows <- round(input$plot1_click$x) == as.numeric(diamonds$cut)
    diamonds[keeprows, ]
  })
}

shinyApp(ui, server)

任何帮助将非常感激。提前致谢。

r ggplot2 shiny
1个回答
1
投票

我相信如果你在output$selected_rows中做更多的逻辑,这是可能的。要通过y变量进行过滤,只需添加对input$plot1_click$y的引用即可。对于facet(或panels),你会想要使用input$plot1_click$panelvar1

keeprows_x     <- round(input$plot1_click$x) == as.numeric(diamonds$cut)
keeprows_y     <- round(input$plot1_click$y) == as.numeric(diamonds$color)
keeprows_panel <- input$plot1_click$panelvar1 == is.even(diamonds$price)
diamonds[keeprows_x & keeprows_y & keeprows_panel, ]

注意:我用type模仿is.even(diamonds$price)的逻辑。您可能希望查看this github issue以获得进一步的讨论和解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.