From 28cd7b47c66d24649697c9e172f8e04416dfaa4d Mon Sep 17 00:00:00 2001 From: Midoux Cedric <cedric.midoux@irstea.fr> Date: Tue, 24 Mar 2020 18:18:09 +0100 Subject: [PATCH] rework barplot with shinymeta --- panels/barplot-server.R | 104 +++++++++++++++++----------------------- panels/barplot-ui.R | 4 +- server.R | 1 + ui.R | 1 + 4 files changed, 48 insertions(+), 62 deletions(-) diff --git a/panels/barplot-server.R b/panels/barplot-server.R index 86a7751..cf09c42 100644 --- a/panels/barplot-server.R +++ b/panels/barplot-server.R @@ -1,64 +1,64 @@ output$barplotShowRankUI <- renderUI({ - validate(need(data16S(), "")) + validate(need(physeq(), "")) radioButtons( "barplotShowRank", label = "Taxonomic rank used for coloring : ", - choices = c(rank_names(data16S()), "OTU"), + choices = c(rank_names(physeq()), "OTU"), selected = "Phylum", inline = TRUE ) }) output$barplotFilterRankUI <- renderUI({ - validate(need(data16S(), "")) + validate(need(physeq(), "")) radioButtons( "barplotFilterRank", label = "Taxonomic rank used for filtering : ", - choices = c("NULL" = 0, rank_names(data16S())), + choices = c("NULL" = 0, rank_names(physeq())), inline = TRUE ) }) output$barplotTaxaUI <- renderUI({ - validate(need(data16S(), ""), + validate(need(physeq(), ""), need(input$barplotFilterRank, ""), need(input$barplotFilterRank!=0, "")) selectInput( "barplotTaxa", label = "Selected filter taxa : ", - choices = unique(as.vector(tax_table(data16S())[, input$barplotFilterRank])), + choices = unique(as.vector(tax_table(physeq())[, input$barplotFilterRank])), selected = TRUE ) }) output$barplotNbTaxaUI <- renderUI({ - validate(need(data16S(), "")) + validate(need(physeq(), "")) sliderInput( "barplotNbTaxa", label = "Number of sub-taxa : ", min = 1, - #max = sum(tax_table(tax_glom(data16S(), rank_names(data16S())[1+as.integer(input$barplotFilterRank)]))[, as.integer(input$barplotFilterRank)]==input$barplotTaxa) + #max = sum(tax_table(tax_glom(physeq(), rank_names(physeq())[1+as.integer(input$barplotFilterRank)]))[, as.integer(input$barplotFilterRank)]==input$barplotTaxa) max = 30, value = 10 ) }) output$barplotGridUI <- renderUI({ - validate(need(data16S(), "")) + validate(need(physeq(), "")) selectInput("barplotGrid", label = "Subplot : ", - choices = c("..." = 0, sample_variables(data16S()))) + choices = c("..." = 0, sample_variables(physeq()))) }) output$barplotXUI <- renderUI({ - validate(need(data16S(), "")) + validate(need(physeq(), "")) selectInput("barplotX", label = "X : ", - choices = c("..." = 0, sample_variables(data16S()))) + choices = c("..." = "Sample", sample_variables(physeq()))) }) output$barplotUI <- renderUI({ - validate(need(data16S(), "")) + validate(need(physeq(), "")) box( title = "Setting : ", width = NULL, @@ -68,57 +68,41 @@ output$barplotUI <- renderUI({ uiOutput("barplotTaxaUI"), uiOutput("barplotNbTaxaUI"), uiOutput("barplotGridUI"), - uiOutput("barplotXUI"), - collapsedBox(verbatimTextOutput("barplotScript"), title = "RCode") + uiOutput("barplotXUI") ) }) -output$barplotScript <- renderText({ - scriptArgs <- c( - "physeq = data", - glue("taxaRank1 = \"{input$barplotFilterRank}\""), - glue("taxaSet1 = \"{input$barplotTaxa}\""), - glue("taxaRank2 = \"{input$barplotShowRank}\""), - glue("numberOfTaxa = {input$barplotNbTaxa}") - ) - if (!is.null(checkNull(input$barplotX))) { - scriptArgs <- c(scriptArgs, glue("x = \"{input$barplotX}\"")) +output$barplot <- metaRender2(renderPlot, { + validate(need(physeq(), "Requires an abundance dataset"), + need(input$barplotShowRank, "")) + + barplotGrid <- if (!is.null(checkNull(input$barplotGrid))) { + metaExpr({ + facet_grid(..(paste(".", "~", input$barplotGrid)), scales = "free_x") + }) } - script <- c( - scriptHead, - "# Plot filtered barplot", - glue( - "p <- plot_composition({glue_collapse(scriptArgs, sep=', ')})" - ) - ) - if (!is.null(checkNull(input$barplotGrid))) { - script <- c( - script, - glue( - "p <- p + facet_grid(\". ~ {input$barplotGrid}\", scales = \"free_x\")" - ) + + metaExpr({ + p <- plot_composition( + physeq = physeq(), + taxaRank1 = ..(checkNull(input$barplotFilterRank)), + taxaSet1 = ..(input$barplotTaxa), + taxaRank2 = ..(input$barplotShowRank), + numberOfTaxa = ..(input$barplotNbTaxa), + x = ..(input$barplotX) ) - } - script <- c(script, "", "plot(p)") - - return(glue_collapse(script, sep = "\n")) + p + ..(barplotGrid) + }) }) -output$barplot <- renderPlot({ - validate( - need(data16S(), "Requires an abundance dataset"), - need(input$barplotShowRank, "") - ) - p <- plot_composition( - physeq = data16S(), - taxaRank1 = checkNull(input$barplotFilterRank), - taxaSet1 = input$barplotTaxa, - taxaRank2 = input$barplotShowRank, - numberOfTaxa = input$barplotNbTaxa, - x = ifelse(is.null(checkNull(input$barplotX)), "Sample", input$barplotX) - ) - if (!is.null(checkNull(input$barplotGrid))) { - p <- p + facet_grid(paste(".", "~", input$barplotGrid), scales = "free_x") - } - return(p) -}) +observeEvent(input$barplot_output_code, + { + displayCodeModal( + expandChain( + quote(library(phyloseq)), + quote(library(phyloseq.extended)), + output$barplot() + ) + ) + } +) diff --git a/panels/barplot-ui.R b/panels/barplot-ui.R index 0e47c82..e6233c9 100644 --- a/panels/barplot-ui.R +++ b/panels/barplot-ui.R @@ -1,2 +1,2 @@ -barplot <-fluidPage(withLoader(plotOutput("barplot", height = 700)), - uiOutput("barplotUI")) +barplot <-fluidPage(outputCodeButton(withLoader(plotOutput("barplot", height = 700))), + uiOutput("barplotUI")) diff --git a/server.R b/server.R index 2f8fd37..a8732bb 100644 --- a/server.R +++ b/server.R @@ -1,6 +1,7 @@ options(shiny.maxRequestSize = 30 * 1024 ^ 2) library(shinydashboard) +library(shinymeta) library(phyloseq) library(phyloseq.extended) library(ggplot2) diff --git a/ui.R b/ui.R index d39b4af..af66624 100644 --- a/ui.R +++ b/ui.R @@ -1,4 +1,5 @@ library(shinydashboard) +library(shinymeta) library(shinycustomloader) source("panels/Summary-ui.R", local = TRUE) source("panels/barplot-ui.R", local = TRUE) -- GitLab