为啥我无法在 R Shiny 上绘制图表?

Posted

技术标签:

【中文标题】为啥我无法在 R Shiny 上绘制图表?【英文标题】:Why am I unable to plot the graph on RShiny?为什么我无法在 R Shiny 上绘制图表? 【发布时间】:2021-08-28 00:46:40 【问题描述】:

我想创建一个 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")

【问题讨论】:

【参考方案1】:

您可以尝试以下代码,该代码从下拉列表中选择包含两列的数据,并使用所选颜色绘制一列与另一列。

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('plot')
    )
  )
)


server <- function(input, output) 
  
  selectedData <- reactive(
    dat[, c(input$xcol, input$ycol)]
  )
  output$plot<-renderPlot(
    dat <- selectedData()
    plot(dat[[1]], dat[[2]], col = input$color)
  
  )


shinyApp(ui = ui, server = server)

【讨论】:

【参考方案2】:

您的代码存在一些问题:

    您没有在任何地方使用反应式selectedData 对象。 您有plotOutput('plot1'),但随后使用output$plot。这可能只是一个简单的错字。 通用的基础 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)

产生

【讨论】:

以上是关于为啥我无法在 R Shiny 上绘制图表?的主要内容,如果未能解决你的问题,请参考以下文章

在 R 中用 Shiny 绘制散点图;情节没有更新,也没有完全互动

Shiny R仅绘制滑块范围的极值

用情节 Shiny R 制作累积图形

R:在同一图表上绘制不同大小的列

为啥要以这种方式绘制我的图表?

通过 Plotly 在 Shiny 应用程序中绘制的缺失数据