R 固定绘图的宽度

R 固定绘图的宽度,r,shiny,shinydashboard,R,Shiny,Shinydashboard,我指定了列宽为5的绘图我的问题是,我的图显示的列宽更接近2,图之间有空白填充 这是我的一大难题 library(tidyverse) library(shiny) library(shinydashboard) ##----------DATA------------## set.seed(1) df <- map(1:4, ~data.frame(x=1:10, y=(1:10)+runif(.x), z=.x)) stat <- data.frame(A=runif(4)+2,

我指定了列宽为
5
的绘图我的问题是,我的图显示的列宽更接近
2
,图之间有空白填充

这是我的一大难题

library(tidyverse)
library(shiny)
library(shinydashboard)

##----------DATA------------##
set.seed(1)
df <- map(1:4, ~data.frame(x=1:10, y=(1:10)+runif(.x), z=.x))
stat <- data.frame(A=runif(4)+2, B=runif(4)+2, depth=c(10,20,30,40))
##----------END DATA------------##

## UI
ui <- dashboardPage(
            dashboardHeader(title = "Test"),
            dashboardSidebar(
                  sidebarMenu(
                        menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard"))
                  )
            ),
            dashboardBody(
                  tabItems(
                        # First tab content
                        tabItem(tabName = "dashboard",
                              fluidRow( 
                                    box(title = "Inputs",
                                         solidHeader = TRUE,
                                         collapsible = TRUE,
                                         width = 3,    
                                     selectInput(inputId="parameter", label="Parameter", choices=c("This", "That"), selected=c("This"))
                                    )
                              ), 
                              fluidRow(
                                    column(width=5,
                                         box(title = "Plot",
                                              solidHeader = TRUE,
                                              collapsible = TRUE,
                                              plotOutput(outputId="histogram")
                                         )
                                    ),      
                            column(width=5,
                                         box(title = "Summary",
                                     plotOutput(outputId="linegraph")
                                         )
                                    )
                              )
                )
            ) # end tabitems
        ) # end dashboardbody
    ) # end dashboardpage

## SERVER
server <-   function( input, output ) {
                  # Reactive data
                  data <- reactive({ df })
                  stats <- reactive({ stat })

                  # Histogram plot
            output$histogram <- renderPlot({ ggplot() +
                                                      geom_step(data=data()[[1]], aes(x=x, y=y, colour="1"), lwd=1) + 
                                                      geom_step(data=data()[[2]], aes(x=x, y=y, colour="2"), lwd=1) +
                                                      geom_step(data=data()[[3]], aes(x=x, y=y, colour="3"), lwd=1) +
                                                      geom_step(data=data()[[4]], aes(x=x, y=y, colour="4"), lwd=1) +
                                                      scale_color_manual(values=c("1"="cyan","2"="blue","3"="green","4"="red")) +
                                                      theme_classic() +
                                                      guides(color=guide_legend(title="")) +
                                                      theme(legend.position = "bottom", legend.direction = "horizontal") + 
                                                      theme(text = element_text(size=20)) +
                                                      xlab("") + ylab("") })

                  # Linegraph plot
            output$linegraph <- renderPlot({ ggplot() +
                                                      geom_point(data=stats(), aes(x=depth, y=A, color="A"), size=5) + 
                                                      geom_line(data=stats(), aes(x=depth, y=A, color="A"), lwd=1) +
                                                      geom_point(data=stats(), aes(x=depth, y=B, color="B"), size=5) + 
                                                      geom_line(data=stats(), aes(x=depth, y=B, color="B"), lwd=1) +
                                                      geom_hline(yintercept=0, lty=2, lwd=1, color="red") +
                                                      scale_color_manual(values=c("A"="black","B"="grey")) +
                                                      theme_classic() +
                                                      guides(color=guide_legend(title="")) +
                                                      theme(legend.position = "bottom", legend.direction = "horizontal") + 
                                                      theme(text = element_text(size=20)) +
                                                      xlab("") + ylab("") })
        }

shinyApp( ui = ui, server = server )
库(tidyverse)
图书馆(闪亮)
图书馆(shinydashboard)
##----------资料------------##
种子(1)

dfbox()
的默认宽度为6(=总宽度的1/2)。 但是,您的框位于宽度为5的列中。 因此,您的长方体的总大小为5*0.5=2.5

只要在框内设置
width=12
,就可以获得列的全宽

这是您的固定MWE(并用
ggplot
purr
替换
tidyverse
,因为我不想污染我的R…):

库(ggplot2)
图书馆(purrr)
图书馆(闪亮)
图书馆(shinydashboard)
##----------资料------------##
种子(1)

啊,有道理。谢谢!
library(ggplot2)
library(purrr)
library(shiny)
library(shinydashboard)

##----------DATA------------##
set.seed(1)
df <- map(1:4, ~data.frame(x=1:10, y=(1:10)+runif(.x), z=.x))
stat <- data.frame(A=runif(4)+2, B=runif(4)+2, depth=c(10,20,30,40))
##----------END DATA------------##

## UI
ui <- dashboardPage(
  dashboardHeader(title = "Test"),
  dashboardSidebar(
    sidebarMenu(
      menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard"))
    )
  ),
  dashboardBody(
    tabItems(
      # First tab content
      tabItem(tabName = "dashboard",
              fluidRow( 
                box(title = "Inputs",
                    solidHeader = TRUE,
                    collapsible = TRUE,
                    width = 3,    
                    selectInput(inputId="parameter", label="Parameter", choices=c("This", "That"), selected=c("This"))
                )
              ), 
              fluidRow(
                column(width = 5,
                       box(title = "Plot",
                           solidHeader = TRUE,
                           collapsible = TRUE,
                           width = 12,
                           plotOutput(outputId="histogram")
                       )
                ),      
                column(width = 5,
                       box(title = "Summary",
                           width = 12,
                           plotOutput(outputId="linegraph")
                       )
                )
              )
      )
    ) # end tabitems
  ) # end dashboardbody
) # end dashboardpage

## SERVER
server <-   function( input, output ) {
  # Reactive data
  data <- reactive({ df })
  stats <- reactive({ stat })

  # Histogram plot
  output$histogram <- renderPlot({ ggplot() +
      geom_step(data=data()[[1]], aes(x=x, y=y, colour="1"), lwd=1) + 
      geom_step(data=data()[[2]], aes(x=x, y=y, colour="2"), lwd=1) +
      geom_step(data=data()[[3]], aes(x=x, y=y, colour="3"), lwd=1) +
      geom_step(data=data()[[4]], aes(x=x, y=y, colour="4"), lwd=1) +
      scale_color_manual(values=c("1"="cyan","2"="blue","3"="green","4"="red")) +
      theme_classic() +
      guides(color=guide_legend(title="")) +
      theme(legend.position = "bottom", legend.direction = "horizontal") + 
      theme(text = element_text(size=20)) +
      xlab("") + ylab("") })

  # Linegraph plot
  output$linegraph <- renderPlot({ ggplot() +
      geom_point(data=stats(), aes(x=depth, y=A, color="A"), size=5) + 
      geom_line(data=stats(), aes(x=depth, y=A, color="A"), lwd=1) +
      geom_point(data=stats(), aes(x=depth, y=B, color="B"), size=5) + 
      geom_line(data=stats(), aes(x=depth, y=B, color="B"), lwd=1) +
      geom_hline(yintercept=0, lty=2, lwd=1, color="red") +
      scale_color_manual(values=c("A"="black","B"="grey")) +
      theme_classic() +
      guides(color=guide_legend(title="")) +
      theme(legend.position = "bottom", legend.direction = "horizontal") + 
      theme(text = element_text(size=20)) +
      xlab("") + ylab("") })
}

shinyApp( ui = ui, server = server )