我需要創建一個閃亮的應用程式,用戶可以在其中通過滑塊決定要顯示的圖表數量和列數。為了合并圖形,我使用了該函式grid.arrange但它不是強制性的,重要的是要有 ggplot 物件。我需要coord_fixed(). 這是一個小的可執行示例:
library(shiny)
library(shinythemes)
library(readr)
library(ggplot2)
library(dplyr)
library(tidyr)
library(grid)
library(gridExtra)
library(ggforce)
library(shinythemes)
ui <- fluidPage(
navbarPage("MotorBrain",
tabPanel("Configurazione",
sidebarLayout(
sidebarPanel(
sliderInput("input1", "N. utenti",
min = 1, max = 133,
value = 3),
sliderInput("nCol1", "Ncols",
min = 1, max = 32,
value = 1),
actionButton("goButton1", "Visualizza")),
fluidRow()))),
tabPanel("Visualizzazione",
fluidRow(
uiOutput("outputTest1"))
))
server <- function(input, output,session) {
input1<-eventReactive(input$goButton1,{
input$input1
})
output$outputTest1 <- renderUI({
pl <- vector("list", length = input1())
for(t in 1: input1()) {
p<-ggplot()
geom_point(x=runif(10000,0, 1),y=runif(500,0, 1))
coord_fixed()
pl[[t]] <-p
}
output$plot_test1<- renderPlot({
grid.arrange(grobs=pl,ncol=input$nCol1,top="")
})
plotOutput(outputId = "plot_test1")
})
}
shinyApp(ui = ui, server = server)
我需要再添加兩個滑塊,用戶可以使用它們來決定在網格中的各種圖形之間放置多少水平和垂直空白。我怎樣才能做到這一點?
uj5u.com熱心網友回復:
gridExtra在列之間添加了不可控的空間,因此一種解決方案是使用,patchwork而不添加額外的空間。然后我們可以使用margin技巧來增加空間:
library(shiny)
library(shinythemes)
library(readr)
library(ggplot2)
library(dplyr)
library(tidyr)
library(grid)
library(ggforce)
library(patchwork)
ui <- fluidPage(
navbarPage("MotorBrain",
tabPanel("Configurazione",
sidebarLayout(
sidebarPanel(
sliderInput("input1", "N. utenti",
min = 1, max = 133,
value = 3),
sliderInput("nCol1", "Ncols",
min = 1, max = 32,
value = 1),
sliderInput("h_space", "top bottom space (pt)",
min = 1, max = 100,
value = 1),
sliderInput("v_space", " left right space (pt)",
min = 1, max = 100,
value = 1),
actionButton("goButton1", "Visualizza")),
fluidRow()))),
tabPanel("Visualizzazione",
fluidRow(
uiOutput("outputTest1"))
))
server <- function(input, output,session) {
input1<-eventReactive(input$goButton1,{
input$input1
})
output$outputTest1 <- renderUI({
pl <- vector("list", length = input1())
for(t in 1: input1()) {
p<-ggplot()
geom_point(x=runif(10000,0, 1),y=runif(500,0, 1))
coord_fixed()
# the space is added to both sides, so we need to reduce by half
theme(plot.margin = unit(c(
input$h_space/2,
input$v_space/2,
input$h_space/2,
input$v_space/2
), "pt"))
pl[[t]] <-p
}
output$plot_test1<- renderPlot({
Reduce(` `, pl)
plot_layout(ncol = input$nCol1)
})
plotOutput(outputId = "plot_test1")
})
}
shinyApp(ui = ui, server = server)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/381252.html
下一篇:如何創建世界地圖,上面有熱圖
