我想修改此代码:
https://gist.github.com/wch/5436415
因此,不会出现1个情节,而是会出现4个情节。
在当前代码input$n = 1
中,您会看到1个情节;
plot1
或input$n=3
您会看到3个地块:
plot1
plot2
plot3
我需要以2 x 2布局显示4个地块,以便input$n = 1
看到
plot1A plot1B
plot1C plot1D
input$n = 2
你会看到;
plot1A plot1B
plot1C plot1D
plot2A plot2B
plot2C plot2D
input$n = 3
你会看到:
plot1A plot1B
plot1C plot1D
plot2A plot2B
plot2C plot2D
plot3A plot3B
plot3C plot3D
等...
任何人都可以修改该代码,以便在上面看到的同一个2x2框架中显示图4次
以下是我提出的建议:
这是我的ui.R:
shinyUI(pageWithSidebar(
headerPanel("Dynamic number of plots"),
sidebarPanel(
sliderInput("n", "Number of plots", value=1, min=1, max=5)
),
mainPanel(
# This is the dynamic UI for the plots
h3("Heading 1"),
uiOutput("plots"),
h3("Heading 2"),
verbatimTextOutput("test")
)
))
这是我的server.r:
library("gridExtra")
library(ggplot2)
shinyServer(function(input, output) {
# Insert the right number of plot output objects into the web page
output$plots <- renderUI({
plot_output_list <- lapply(1:(input$n), function(i) {
plotname <- paste("plot", i, sep="")
plotOutput(plotname, height = 280, width = 250)
})
# Convert the list to a tagList - this is necessary for the list of items
# to display properly.
do.call(tagList, plot_output_list)
do.call(grid.arrange, plot_output_list)
})##End outputplots
#PrintPlots<- reactive({
observe({
max_plots<-length(getAugmentedTerms(input$Desk, input$Product, input$File1))
#print(max_plots)
# Call renderPlot for each one. Plots are only actually generated when they
# are visible on the web page.
for (i in 1:max_plots) {
# Need local so that each item gets its own number. Without it, the value
# of i in the renderPlot() will be the same across all instances, because
# of when the expression is evaluated.
local({
my_i <- i
plotname <- paste("plot", my_i, sep="")
p1<-qplot(1:10)
p2<-qplot(1:10)
p3<- qplot(1:10)
p4<-qplot(1:10)
output[[plotname]] <- renderPlot({
#grid.arrange( arrangeGrob
arrangeGrob( p1, p2,p3,p4, ncol= 2)
})#End RENDER PLOT
})#END LOCAL
}##### End FoR Loop
})# END OF PRINT PLOTS
})# END OF ENERYTHING
但我收到错误:
Error in arrangeGrob(p1, p2, p3, p4, ncol = 2) : input must be grobs!
谢谢。
答案 0 :(得分:1)
不确定我理解你的问题。
顺便说一下,如果你使用标准图(如你的要点),你可以简单地使用par选项。
output[[plotname]] <- renderPlot({
par(mfrow = c(2,2))
p1 = plot(...)
p2 = plot(...)
p3 = plot(...)
p4 = plot(...)
})
当你使用ggplot2图形时,你不能设置par选项,我不知道ggplot2中已经实现了类似的东西。
顺便说一下,我找到了the multiplot() function
这似乎是你在寻找的东西。请在服务器的开头定义多时隙功能。
R,在致电shinyServer()
之前。您可以在服务器中复制并粘贴该功能。
R或保持脚本清洁并将其保存到其他脚本(例如functions.R
)。在这种情况下,请不要忘记使用source("functions.R")
读取函数。
在您的反应环境中,您将生成四个图,然后将它们一起打印出来:
output[[plotname]] <- renderPlot({
qp1 <- qplot(1:my_i, 1:my_i)
qp2 <- qplot(1:my_i, 1:my_i)
qp3 <- qplot(1:my_i, 1:my_i)
qp4 <- qplot(1:my_i, 1:my_i)
multiplot(qp1, qp2, qp3, qp4, cols=2)
})
我希望我回复你的问题。