Shiny 地块主面板布局图

Shiny 地块主面板布局图,shiny,Shiny,我想得到以下布局。 在我的实际绘图中,第三列中的两个绘图是相同的x轴,因此我 在一列中展示它们 下面的示例代码有三个直方图和一列。 因此,我们无法观察到最低直方图是如何根据箱子变化的。因此我想得到上面的布局 示例代码 library(shiny) # Define UI for application that draws a histogram ui <- fluidPage( # Application title titlePanel("Old Faithfu

我想得到以下布局。

在我的实际绘图中,第三列中的两个绘图是相同的x轴,因此我 在一列中展示它们

下面的示例代码有三个直方图和一列。 因此,我们无法观察到最低直方图是如何根据箱子变化的。因此我想得到上面的布局

示例代码

library(shiny)

# Define UI for application that draws a histogram
ui <- fluidPage(

    # Application title
    titlePanel("Old Faithful Geyser Data"),

    # Sidebar with a slider input for number of bins 
    sidebarLayout(
        sidebarPanel(
            sliderInput("bins",
                        "Number of bins:",
                        min = 1,
                        max = 50,
                        value = 30)
        ),

        # Show a plot of the generated distribution
        mainPanel(
           plotOutput("distPlot1"),
           plotOutput("distPlot2"),

           plotOutput("distPlot3")

        )
    )
)

# Define server logic required to draw a histogram
server <- function(input, output) {

    output$distPlot1 <- renderPlot({
        # generate bins based on input$bins from ui.R
        x    <- faithful[, 2]
        bins <- seq(min(x), max(x), length.out = input$bins + 1)

        # draw the histogram with the specified number of bins
        hist(x, breaks = bins, col = 'darkgray', border = 'white')
    })




    output$distPlot2 <- renderPlot({
        # generate bins based on input$bins from ui.R
        y    <- faithful[, 2]
        bins <- seq(min(y), max(y), length.out = input$bins + 1)

        # draw the histogram with the specified number of bins
        hist(y, breaks = bins, col = 'darkgray', border = 'white')
    })








    output$distPlot3 <- renderPlot({
        # generate bins based on input$bins from ui.R
        z    <- faithful[, 2]
        bins <- seq(min(z), max(z), length.out = input$bins + 1)

        # draw the histogram with the specified number of bins
        hist(z, breaks = bins, col = 'darkgray', border = 'white')
    })






}

# Run the application 
shinyApp(ui = ui, server = server)
库(闪亮)
#为绘制直方图的应用程序定义UI

ui我会使用ggplot2和gridExtra来安排绘图。 以下是我得到的最终输出:

主绘图是使用grid.arrange将它们组合在一起完成的,ggplot2使您能够更好地控制代码中名为plot1、plot2和plot3的每个子绘图,plot2和plot3构成了第三列。 因为第三列的x轴不同,所以我添加了第二个箱子宽度来控制它们。为了使程序更具动态性,我使用renderUI和uiOutput将数据信息从服务器推回到ui,以生成两个sliderInput

代码:

library(ggplot2)
library(grid)
library(gridExtra)

# Define UI for application that draws a histogram
ui <- fluidPage(

    # Application title
    titlePanel("Old Faithful Geyser Data"),

    # Sidebar with a slider input for number of bins 
    sidebarLayout(
        sidebarPanel(
            uiOutput("bins1"),
            uiOutput("bins2")
        ),

        # Show a plot of the generated distribution
        mainPanel(
            plotOutput("ggplot")
        )
    )
)

# Define server logic required to draw a histogram
server <- function(input, output) {

    ## Your Data and give colnames for ggplot
    x    <- as.data.frame(faithful[, 2])
    y    <- as.data.frame(faithful[, 1])
    z    <- as.data.frame(faithful[, 1])
    colnames(x) <- "Count"
    colnames(y) <- "Count"
    colnames(z) <- "Count"

    ## Set bin size 1 and 2
    binWidth1 <- c(max(x))
    binWidth2 <- c(max(y))


    output$bins1 <- renderUI({
        sliderInput("bins1", 
                    h3("Bin width #1 "),
                    min = 1,
                    max = max(x),
                    value = (1 + max(x))/10)
    })

    output$bins2 <- renderUI({
        sliderInput("bins2", 
                    h3("Bin width #2 "),
                    min = 1,
                    max = max(y),
                    value = (1 +max(y))/10)
    })

    output$ggplot <- renderPlot({
        # bins <- seq(min(x), max(x), length.out = input$bins + 1)
        plot1 <- ggplot(x, aes(x = Count)) + 
            geom_histogram(binwidth = input$bins1, fill = "black", col = "grey")
        plot2 <- ggplot(y, aes(x = Count)) + 
            geom_histogram(binwidth = input$bins2, fill = "black", col = "grey")
        plot3 <- ggplot(z, aes(x = Count)) + 
            geom_histogram(binwidth = input$bins2, fill = "black", col = "grey")
        grid.arrange(grid.arrange(plot1), grid.arrange(plot2, plot3, ncol = 1), ncol = 2, widths = c(2, 1))
    })
}

# Run the application 
shinyApp(ui = ui, server = server)
库(ggplot2)
图书馆(网格)
图书馆(gridExtra)
#为绘制直方图的应用程序定义UI

谢谢,我理解你的想法。在传递给Shiny之前,该图被分割。非常感谢。
library(ggplot2)
library(grid)
library(gridExtra)

# Define UI for application that draws a histogram
ui <- fluidPage(

    # Application title
    titlePanel("Old Faithful Geyser Data"),

    # Sidebar with a slider input for number of bins 
    sidebarLayout(
        sidebarPanel(
            uiOutput("bins1"),
            uiOutput("bins2")
        ),

        # Show a plot of the generated distribution
        mainPanel(
            plotOutput("ggplot")
        )
    )
)

# Define server logic required to draw a histogram
server <- function(input, output) {

    ## Your Data and give colnames for ggplot
    x    <- as.data.frame(faithful[, 2])
    y    <- as.data.frame(faithful[, 1])
    z    <- as.data.frame(faithful[, 1])
    colnames(x) <- "Count"
    colnames(y) <- "Count"
    colnames(z) <- "Count"

    ## Set bin size 1 and 2
    binWidth1 <- c(max(x))
    binWidth2 <- c(max(y))


    output$bins1 <- renderUI({
        sliderInput("bins1", 
                    h3("Bin width #1 "),
                    min = 1,
                    max = max(x),
                    value = (1 + max(x))/10)
    })

    output$bins2 <- renderUI({
        sliderInput("bins2", 
                    h3("Bin width #2 "),
                    min = 1,
                    max = max(y),
                    value = (1 +max(y))/10)
    })

    output$ggplot <- renderPlot({
        # bins <- seq(min(x), max(x), length.out = input$bins + 1)
        plot1 <- ggplot(x, aes(x = Count)) + 
            geom_histogram(binwidth = input$bins1, fill = "black", col = "grey")
        plot2 <- ggplot(y, aes(x = Count)) + 
            geom_histogram(binwidth = input$bins2, fill = "black", col = "grey")
        plot3 <- ggplot(z, aes(x = Count)) + 
            geom_histogram(binwidth = input$bins2, fill = "black", col = "grey")
        grid.arrange(grid.arrange(plot1), grid.arrange(plot2, plot3, ncol = 1), ncol = 2, widths = c(2, 1))
    })
}

# Run the application 
shinyApp(ui = ui, server = server)