将多个反应区图和表格添加到Shiny应用程序 [英] Adding multiple reactive plots and tables to Shiny app
问题描述
我正在开发一个Shiny应用程序,在我进行过程中,我一直在以随意的方式添加图形和表格。我希望有一个更好的框架,以便随着输出的进一步发展,可以在输出中灵活地添加反应性图形和表格。
I am working on a Shiny app and as I go I have been adding figures and tables in a haphazard way. I would like to have a better framework so that I can flexibly add reactive figures and tables to the output as it develops further.
此刻,我一直在使用tabPanel和fluidrow添加其他汇总表和第二个绘图。但是我很难适应这个问题。例如,我当前生成3个图,但一次只能绘制2个图。谁能给我展示一种修改代码以在同一页面上显示所有三个图(distPlot1,distPlot2,distPlot3)和汇总表的方法吗?理想情况下,将来添加额外的表格和绘图将很容易。
At the moment I have been using tabPanel and fluidrow to add additional a summary table and a second plot. However I have had trouble adapting this. For example I currently generate 3 plots but have only able to plot 2 at a time. Could anyone show me a way to modify the code to display all three plots (distPlot1, distPlot2, distPlot3) and the summary table on the same page? Ideally in a way that it would be simple to add additional tables and plots in the future.
预先感谢您。
我当前的代码如下。
ui.R
library(reshape2)
library(shiny)
library(ggplot2)
# Define UI for application that draws a histogram
fluidPage(
# Application title
titlePanel("Mutation Probability"),
# Sidebar with a slider input for the number of bins
sidebarLayout(
sidebarPanel(
sliderInput("x", "Probability of mutation (per bp):",
min=1/1000000000000, max=1/1000, value=1/10000000),
sliderInput("y", "Size of region (bp):",
min = 10, max = 10000, value = 1000, step= 100),
sliderInput("z", "Number of samples:",
min = 1, max = 100000, value = 1000, step= 10)
),
# Show a plot of the generated distribution
mainPanel(
tabsetPanel(
tabPanel("Plot",
fluidRow(
splitLayout(cellWidths = c("50%", "50%"), plotOutput("distPlot1"), plotOutput("distPlot3"), plotOutput("distPlot3)"))
)),
tabPanel("Summary", verbatimTextOutput("summary"))
)
)
)
)
server.R
server <- function(input, output) {
mydata <- reactive({
x <- input$x
y <- input$y
z <- input$z
Muts <- as.data.frame(rpois(100,(x*y*z)))
Muts
})
output$distPlot1 <- renderPlot({
Muts <- mydata()
ggplot(Muts, aes(Muts)) + geom_density() +xlab("Observed variants")
})
output$distPlot2 <-renderPlot({
Muts <- mydata()
ggplot(Muts, aes(Muts)) + geom_histogram() + xlab("Observed variants")
})
#get a boxplot working
output$distPlot3 <-renderPlot({
Muts <- mydata()
ggplot(data= melt(Muts), aes(variable, value)) + geom_boxplot() + xlab("Observed variants")
})
output$summary <- renderPrint({
Muts <- mydata()
summary(Muts)
})
}
推荐答案
我喜欢使用 grid.arrange $ c $之类的工具在服务器中布置图形c>来自软件包
gridExtra
或软件包 cowplot
-它们提供了很多布局灵活性。例如:
I like laying out the graphics in the server using tools like grid.arrange
from the package gridExtra
or the package cowplot
- they offer a lot of layout flexiblity. This for example:
library(reshape2)
library(shiny)
library(ggplot2)
library(gridExtra)
# Define UI for application that draws a histogram
u <- fluidPage(
# Application title
titlePanel("Mutation Probability"),
# Sidebar with a slider input for the number of bins
sidebarLayout(
sidebarPanel(
sliderInput("x", "Probability of mutation (per bp):",
min=1/1000000000000, max=1/1000, value=1/10000000),
sliderInput("y", "Size of region (bp):",
min = 10, max = 10000, value = 1000, step= 100),
sliderInput("z", "Number of samples:",
min = 1, max = 100000, value = 1000, step= 10)
),
# Show a plot of the generated distribution
mainPanel(
tabsetPanel(
tabPanel("Plot",
fluidRow(
plotOutput("distPlot4"),
verbatimTextOutput("summary"))
)),
tabPanel("Summary", verbatimTextOutput("summary1"))
)
)
)
)
s <- function(input, output) {
mydata <- reactive({
x <- input$x
y <- input$y
z <- input$z
Muts <- as.data.frame(rpois(100,(x*y*z)))
Muts
})
output$distPlot4 <- renderPlot({
Muts <- mydata()
p1 <- ggplot(Muts, aes(Muts)) + geom_density() +xlab("Observed variants")
p2 <- ggplot(Muts, aes(Muts)) + geom_histogram() + xlab("Observed variants")
p3 <- ggplot(data= melt(Muts), aes(variable, value)) + geom_boxplot() + xlab("Observed variants")
grid.arrange(p1,p2,p3, ncol=3,widths = c(2,1,1))
})
output$summary <- renderPrint({
Muts <- mydata()
summary(Muts)
})
}
shinyApp(u,s)
这会产生:
对于汇总表,我只是将它们添加到底部,一个接一个地添加,在这里您无能为力我认为。
For summary tables, I just add them to the bottom, one after the other, not much else you can do there I think.
这篇关于将多个反应区图和表格添加到Shiny应用程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!