2015-10-15 112 views
0

我有一些问题,实施GGPLOT2成闪亮的应用qqplot闪亮的应用改变轴和问题,有条件的情节

  1. 我不能得到的代码在我下面给的例子工作。由于某种原因,当我使用aes_string时,它找不到factor1,当我使用aes时,它找不到params()。在文件中,用我的数据提供,这一步工作。对不起。

  2. 我想用qqplot2绘制我的 项目的数据。当我拿出数据并在闪亮的应用程序外绘制它们时,一切都很好。当我在 的代码中使用闪亮的应用程序时,它将我的坐标轴从因子 更改为有争议的坐标。

  3. 我正在根据用户输入和“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

回答

0

由于您对因子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) 
+0

有时候...你应该停止工作,并思考别的东西。对不起 – Mugel2110

+0

不用担心!幸运的是有一个快速修复 –