在闪亮的应用程序中使用ggvis创建散点图

问题描述

我正在尝试创建一个执行以下操作的简单应用程序:

  • 将csv文件导入为响应文件(必须是响应文件
  • 一个tabPanel中将csv的内容作为数据表打印出来
  • 在另一个tabPanel中使用ggvis创建交互式散点图

但是,我无法创建绘图-应该显示绘图的tabPanel是空白的。控制台中没有任何错误或警告消息。不确定代码有什么问题。

代码如下:

# Define UI for application 
ui <- fluidPage(

    # Application title
    titlePanel("App"),sidebarLayout(
        sidebarPanel(
            fileInput(inputId = "inputCrosstab",label = "Select the input sheet",multiple = FALSE,accept = c('.csv')
                      )
        ),# Show a table and plot 
        mainPanel(
           tabsetPanel(id = "tabset",type = 'pills',tabPanel(title = "Table",DT::dataTableOutput('table')
                                  ),tabPanel(title = "Charts",ggvisOutput("plot")
                                  )
               
           )
        )
    )
)

# Define server logic required 
server <- function(input,output) {
    
    # Import csv data as a reactive
    dat <- reactive({
        
        req(input$inputCrosstab$datapath)
        dat_tab <- data.table::fread(  file   = input$inputCrosstab$datapath,header = TRUE)
        
    })
    
    # Render imported data as table
    output$table <- DT::renderDataTable({
        dat()
    })
    
    # Plot the table as a scatter plot
    plot <- reactive({
        dat()%>%
            ggvis::ggvis(~Total.x,~Total.y)%>%
            layer_points(fill:="red")%>%
            bind_shiny("plot")

    })
    
    
}

# Run the application 
shinyApp(ui = ui,server = server)

这是我要导入的csv文件(它是一个包含5行3列的文件...一些随机组成的数据)。

X1,Total.x,Total.y
ncksncnxzc,0.8338719625,0.0163952762
xsmkslaxmkaslx,0.5867098735,0.2033673932
njasdnsa,0.3586965341,0.8281010715
sadlasdl;,0.060212096,0.1735624054
nsakksad,0.7281606887,0.3851430044

还有一件事情,在这里我为了可复制的示例导入一个csv。在我的实际代码中,我正在导入一个csv文件并进行一些转换,并创建一个反应性数据表,例如给定的csv数据。

请帮助我解决这个问题。

谢谢, 阿努普

解决方法

您的服务器代码中只有一个很小的错误。分配反应式时,必须添加“ output $ plot”而不是“ plot”。 这是更正的代码。

library(ggvis)
ui <- fluidPage(
 
 # Application title
 titlePanel("App"),sidebarLayout(
   sidebarPanel(
     fileInput(inputId = "inputCrossTab",label = "Select the input sheet",multiple = FALSE,accept = c('.csv')
     )
   ),# Show a table and plot 
   mainPanel(
     tabsetPanel(id = "tabset",type = 'pills',tabPanel(title = "Table",DT::dataTableOutput('table')
                 ),tabPanel(title = "Charts",ggvisOutput("plot")
                 )
                 
     )
   )
 )
)

# Define server logic required 
server <- function(input,output) {
 
 # Import csv data as a reactive
 dat <- reactive({
   
   req(input$inputCrossTab$datapath)
   dat_tab <- data.table::fread(  file   = input$inputCrossTab$datapath,header = TRUE)
   
 })
 
 # Render imported data as table
 output$table <- DT::renderDataTable({
   dat()
 })
 
 # Plot the table as a scatter plot
 output$plot <- reactive({
   dat()%>%
     ggvis::ggvis(~Total.x,~Total.y)%>%
     layer_points(fill:="red")%>%
     bind_shiny("plot")
   
 })
 
 
}

# Run the application 
shinyApp(ui = ui,server = server)```