首页 > 解决方案 > 为什么我无法在 RShiny 上绘制图表?

问题描述

我想创建一个 RShiny 情节。当我启动应用程序时,侧边栏可见但没有绘图。是什么导致了错误?

这是我的代码:

library(shiny)

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      selectInput('xcol', 'X Variable', dimnames(dat)[[2]], 
                  selected = rownames(dat)),
      selectInput('ycol', 'Y Variable', dimnames(dat)[[2]],
                  selected = colnames(dat)),
      selectInput('color', 'Point Color', c("red", "orange", "yellow", "green", "blue", "violet", "purple"))
    ), 
    mainPanel(
      plotOutput('plot1')
    )
  )
)


server <- function(input, output) {
  
  selectedData <- reactive({
    dat[, c(input$xcol, input$ycol)]
  })
  output$plot<-renderPlot({
    plot(dat$axis(side=1,at=c(1:24),labels=dimnames(dat)[[2]],cex.axis=0.4,las=2), dat$axis(side=2))
  }
  )
}

shinyApp(ui = ui, server = server)

数据快照

dput(dat[1:2,1:2])
structure(list(cdc15_10 = c(-0.16, NA), cdc15_30 = c(0.09, NA
)), row.names = c("YAL001C", "YAL002W"), class = "data.frame")

标签: rshinyshinyappsshiny-reactivityshinyjs

解决方案


您的代码存在一些问题:

  1. 您没有在selectedData任何地方使用反应对象。
  2. 你有,plotOutput('plot1')但随后使用output$plot. 这可能只是一个简单的错字。
  3. 一般的基础 R 绘图调用看起来很奇怪。我将从基础开始plot(selectedData()),然后从那里开始添加轴标签等。

这是一个最小的例子

library(shiny)
dat <- data.frame(a = rnorm(10), b = rnorm(10), c = rnorm(10))

ui <- fluidPage(
    sidebarLayout(
        sidebarPanel(
            selectInput(
                'xcol', 
                'X Variable', 
                dimnames(dat)[[2]], 
                selected = rownames(dat)),
            selectInput(
                'ycol', 
                'Y Variable', 
                dimnames(dat)[[2]],
                selected = colnames(dat)),
            selectInput(
                'color', 
                'Point Color', 
                c("red", "orange", "yellow", "green", "blue", "violet", "purple"))
        ), 
        mainPanel(plotOutput('plot1'))
    )
)


server <- function(input, output) {
    
    selectedData <- reactive({
        dat[, c(input$xcol, input$ycol)]
    })
    
    output$plot1 <- renderPlot({
        plot(selectedData())
    })
}

shinyApp(ui = ui, server = server)

产生

在此处输入图像描述


推荐阅读