微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

R Shiny 仪表板 - 如何使用选择框以交互方式为散点图选择 x 和 y 轴?

如何解决R Shiny 仪表板 - 如何使用选择框以交互方式为散点图选择 x 和 y 轴?

我想构建一个交互式散点图,其中可以根据数据框中的列使用选择框选择 x 和 y 轴。

这是使用 mtcars 的示例 - 我使用 colnames(mtcars) 来获取两个选择框的值。但我收到以下错误: ".subset2(x,"impl")$defineOutput 中的错误:scatter 的意外 gg 输出 Unexpected ggplot 输出的 scatter"

我做错了什么? colnames(mtcars) 有问题吗?

library(shiny)
library(shinydashboard)
library(ggplot2)


ui <- dashboardPage(
  dashboardHeader(),dashboardSidebar(),dashboardBody(
    fluidRow(
      Box(selectInput("scat_x",label = h2("select x-axis"),choices = colnames(mtcars)),selectInput("scat_y",label = h2("select y-axis"),choices = colnames(mtcars))),Box(plotOutput("scatter",height = 250))
    )
    
  )
)

server <- function(input,output) {
  output$scatter<- ggplot(mtcars,aes(x=input$scat_x,y=input$scat_y)) + 
    geom_point()
}
  

shinyApp(ui,server)

解决方法

  1. 要输出 ggplot,您需要将 ggplot 对象包裹在 renderPlot({})
  2. 您需要使用 aes_string,因为您要将列名作为字符串传递给 ggplot。
library(shiny)
library(shinydashboard)
library(ggplot2)


ui <- dashboardPage(
    dashboardHeader(),dashboardSidebar(),dashboardBody(
        fluidRow(
            box(selectInput("scat_x",label = h2("select x-axis"),choices = colnames(mtcars)),selectInput("scat_y",label = h2("select y-axis"),choices = colnames(mtcars))),box(plotOutput("scatter",height = 250))
        )
        
    )
)

server <- function(input,output) {
    output$scatter<- renderPlot({
        ggplot(mtcars,aes_string(x=input$scat_x,y=input$scat_y)) + geom_point()
    })
}


shinyApp(ui,server)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。