使用R中的光泽绘制反应散点图

我有10年的四个变量数据。这是数据的样子

dat <- data.frame(year = rep(2001:2010,each = 50),a = rnorm(50),b = rnorm(50),c = rnorm(50),d = rnorm(50))

dat_l <- tidyr::gather(dat,variable,value,a:d)

我正在尝试学习闪亮的应用程序。我希望我的应用在给定年份内将一个变量与另一个变量作图 例如如果用户选择ab以及2001年,则将ab绘制2001年。 如果为2003年选择了bc,请绘制2003年的bc,依此类推。 如果在给定年份中选择了一个变量或两个以上变量,也不要执行任何操作。

library(shiny)

u <- fluidPage(
     titlePanel('My analytics'),sidebarLayout(position = 'left',sidebarPanel(
                   checkboxInput('a','aRef',value = F),checkboxInput('b','bRef',checkboxInput('c','cRef',checkboxInput('d','dRef',sliderInput('yearRef','Select Year',min=2001,max=2010,value=1)
                  ),mainPanel(
                    tabsetPanel(
                      tabPanel('Scatter',plotOutput(outputId = 'scatter'))
                    )
                  )
    )
  )


  s <- shinyServer(function(input,output) 
  {
    pt1 <- reactive({
      if (!input$a) return(NULL)
      pdata <- dplyr::filter(dat_l,variable == input$a and year == input$yearRef)
      plot(pdata$value,pdata$value)
    })
    output$scatter = renderPlot({pt1})
  })


shinyApp(u,s)

此代码不完整,希望我能在如何开发代码的服务器部分方面有所帮助。

wfsysysakk 回答:使用R中的光泽绘制反应散点图

我将服务器代码更新为您想要的样子。

pt1应该要求您需要过滤数据以防止出现警告。

input$a不会返回“ a”,而是返回TRUE-因此,要对a进行过滤,您可以在复选框中选择a,b,c和d以及基于子集的方式包括矢量输入(见下文)。它还检查以确保仅选中2个复选框(总和为2)。根据您的需求,可以全部简化。您可能要包括checkboxGroupInput来代替,它将返回选择的字符向量。

由于您可以将一个到d的多个复选框组合在一起,因此请使用%in%而不是==

output$scatter将通过调用反应函数pt1获得过滤后的数据。它将确定在子集数据中存在哪些2个变量,并绘制1与另一个变量。

希望这会有所帮助。

s <- function(input,output) {
  pt1 <- reactive({
    req(input$yearRef)
    if (sum(input$a,input$b,input$c,input$d) == 2) {
      dplyr::filter(dat_l,variable %in% c("a"[input$a],"b"[input$b],"c"[input$c],"d"[input$d]) & 
                    year == input$yearRef)
    } else {
      return(NULL)
    }
  })

  output$scatter = renderPlot({
    pdata <- pt1()
    pvars <- unique(pdata$variable)
    if (!is.null(pdata)) {
      plot(pdata[pdata$variable == pvars[1],]$value,pdata[pdata$variable == pvars[2],xlab = pvars[1],ylab = pvars[2])
    }
  })
}
本文链接:https://www.f2er.com/3166276.html

大家都在问