首页 文章

闪亮应用程序中的qqplot通过条件绘图更改轴和问题

提问于
浏览
1

我有一些问题,将ggplot2应用到闪亮的应用程序中

  • 我无法在下面给出的示例中获得代码 . 出于某种原因,当我使用 aes_string 时,它找不到 factor1 ,当我使用 aes 时,它找不到 params() . 在文件中,使用我的数据,此步骤可行 . 对不起 .

  • 我想使用qqplot2绘制项目的数据 . 当我获取数据并将它们绘制在闪亮的应用程序之外时,一切都很好 . 当我在闪亮的应用程序中实现代码时,它将我的轴从一个因子转换为一个有争议的轴 .

  • 我正在使用"radioButtons"根据用户输入更改x轴上的因子 . 当我使用stripchart()时,它完美地工作 . 当我使用ggplot时,它首先工作正常,但是当我更改因子(更改radioButton的值)时,它找不到输入对象( input$strain ) .

对不起,很长的帖子 . 非常感激您的帮忙 .

这是我的代码:

ui.R

library(shiny)
# Define UI for dataset viewer application
ui<-(fluidPage(
  titlePanel("My project"),
  sidebarLayout(
    sidebarPanel(
      selectInput("dataset", "Choose a dataset:", 
                  choices = c("exp1","exp2", "exp3"),selected="exp1"),
      selectInput(inputId = "param",choices = c("Repsonse A","Response B"),label = "Choose repsonse",selected="Repsonse A"),
      selectInput("factors", "Choose grouping factor:", 
                  choices = c("No grouping","Block"),selected="No grouping"),
      radioButtons(inputId = "fac",choice=c("factor1 on x-axis","factor2 on x-axis"), "Choose type of x-axis")
      ),
    mainPanel(
      h3(textOutput("caption", container = span)),
      plotOutput("strip")
     )
  )
))

和server.R

library(shiny)
library(datasets)
library(ggplot2)
server<-(function(input, output,clientData, session) {
  df<-data.frame("respondA"=runif(20, min=0,    max=0.4),"respondB"=runif(20, min=0,    max=0.4),"factor1"="A","factor2"="B","replicate"=as.factor(c(1:20)))
  df2<-data.frame("respondA"=runif(20, min=0,    max=0.4),"respondB"=runif(20, min=0,    max=0.4),"factor1"="A","factor2"="B","replicate"=as.factor(c(1:20)))
  df3<-data.frame("respondA"=runif(20, min=0,    max=0.4),"respondB"=runif(20, min=0,    max=0.4),"factor1"="A","factor2"="B","replicate"=as.factor(c(1:20)))

  datasetInput <- reactive({
    switch(input$dataset,
           "exp1" = df,
           "exp2" = df2,
           "exp3" = df3)
  })
  params <- reactive({
    switch(input$param,
           "Repsonse A" = datasetInput()$respondA,
           "Response B" = datasetInput()$respondB)
  })
  factor <- reactive({
    switch(input$factors,
           "No grouping"=NULL,
           "Block" = "replicate")
  })

  output$strip <- renderPlot({
    if (input$fac == "factor1 on x-axis") {
      p<-ggplot(datasetInput(), aes_string(x = factor1, y = params())) + 
        ylab("Mylabel1")+
        xlab("Mylabel2")+
        geom_jitter(position = position_jitter(width = .2),shape=19,size=5,aes_string(colour = factor()))+
        labs(title = "Mytitle")+
        theme_bw() +
        theme(axis.line = element_line(colour = "black"),
              panel.grid.major = element_blank(),
              panel.grid.minor = element_blank(),
              panel.border = element_blank(),
              panel.background = element_blank()) 
      print(p)
    } else if(input$fac == "factor2 on x-axis") {
      q<-ggplot(datasetInput(), aes_string(x = factor2, y = params())) + 
        ylab("Mylabel1")+
        xlab("Mylabel2")+
        geom_jitter(position = position_jitter(width = .2),shape=19,size=5,aes_string(colour = factor()))+
        labs(title = "Mytitle")+
        theme_bw() +
        theme(axis.line = element_line(colour = "black"),
              panel.grid.major = element_blank(),
              panel.grid.minor = element_blank(),
              panel.border = element_blank(),
              panel.background = element_blank()) 
      print(q)
    }
  }) 

})
shinyApp(ui=ui,server=server)

Ps:我想使用ggplot,因为我可以很容易地根据一个因素改变数据的颜色 . 对于某些因素,我有> 20个因子水平,并且 stripchart()add=T 无法做到这一点

1 回答

  • 1

    由于你使用因子1和因子2的aes_string,它们必须是字符串 . 这对我有用:

    library(shiny)
    # Define UI for dataset viewer application
    ui<-(fluidPage(
      titlePanel("My project"),
      sidebarLayout(
        sidebarPanel(
          selectInput("dataset", "Choose a dataset:", 
                      choices = c("exp1","exp2", "exp3"),selected="exp1"),
          selectInput(inputId = "param",choices = c("Repsonse A","Response B"),label = "Choose repsonse",selected="Repsonse A"),
          selectInput("factors", "Choose grouping factor:", 
                      choices = c("No grouping","Block"),selected="No grouping"),
          radioButtons(inputId = "fac",choice=c("factor1 on x-axis","factor2 on x-axis"), "Choose type of x-axis")
        ),
        mainPanel(
          h3(textOutput("caption", container = span)),
          plotOutput("strip")
        )
      )
    ))
    library(shiny)
    library(datasets)
    library(ggplot2)
    server<-(function(input, output,clientData, session) {
      df<-data.frame("respondA"=runif(20, min=0,    max=0.4),"respondB"=runif(20, min=0,    max=0.4),"factor1"="A","factor2"="B","replicate"=as.factor(c(1:20)))
      df2<-data.frame("respondA"=runif(20, min=0,    max=0.4),"respondB"=runif(20, min=0,    max=0.4),"factor1"="A","factor2"="B","replicate"=as.factor(c(1:20)))
      df3<-data.frame("respondA"=runif(20, min=0,    max=0.4),"respondB"=runif(20, min=0,    max=0.4),"factor1"="A","factor2"="B","replicate"=as.factor(c(1:20)))
    
      datasetInput <- reactive({
        switch(input$dataset,
               "exp1" = df,
               "exp2" = df2,
               "exp3" = df3)
      })
      params <- reactive({
        switch(input$param,
               "Repsonse A" = datasetInput()$respondA,
               "Response B" = datasetInput()$respondB)
      })
      factor <- reactive({
        switch(input$factors,
               "No grouping"=NULL,
               "Block" = "replicate")
      })
    
      output$strip <- renderPlot({
        if (input$fac == "factor1 on x-axis") {
          p<-ggplot(datasetInput(), aes_string(x = 'factor1', y = params())) + 
            ylab("Mylabel1")+
            xlab("Mylabel2")+
            geom_jitter(position = position_jitter(width = .2),shape=19,size=5,aes_string(colour = factor()))+
            labs(title = "Mytitle")+
            theme_bw() +
            theme(axis.line = element_line(colour = "black"),
                  panel.grid.major = element_blank(),
                  panel.grid.minor = element_blank(),
                  panel.border = element_blank(),
                  panel.background = element_blank()) 
          print(p)
        } else if(input$fac == "factor2 on x-axis") {
          q<-ggplot(datasetInput(), aes_string(x = 'factor2', y = params())) + 
            ylab("Mylabel1")+
            xlab("Mylabel2")+
            geom_jitter(position = position_jitter(width = .2),shape=19,size=5,aes_string(colour = factor()))+
            labs(title = "Mytitle")+
            theme_bw() +
            theme(axis.line = element_line(colour = "black"),
                  panel.grid.major = element_blank(),
                  panel.grid.minor = element_blank(),
                  panel.border = element_blank(),
                  panel.background = element_blank()) 
          print(q)
        }
      }) 
    
    })
    shinyApp(ui=ui,server=server)
    

相关问题