代码之家  ›  专栏  ›  技术社区  ›  SeGa

调整shinyapp大小后ggplot的透明背景变化

  •  0
  • SeGa  · 技术社区  · 8 年前

    下面的代码显示2 ggplot2 图中的情节 shinydashboard . 情节背景应该总是 透明的 甚至 调整大小后 .

    启动应用程序时,绘图正确显示,但一旦调整屏幕大小或关闭siderbar,背景就会再次变为白色。 这是为什么,我怎样才能防止呢?

    关闭边栏时,背景变为白色,重新打开边栏后,绘图再次切换为透明。 但是,当调整窗口大小时,无论发生什么,它都不会变回透明。除了可能调整到默认的窗口尺寸。我没试过;)

    这在rstudio和浏览器(chrome和firefox)中发生。

    我知道一个选项是将ggplots的背景色更改为shinyapp的背景色。但我希望这不是唯一的。

    library(shiny)
    library(shinydashboard)
    library(ggplot2)
    
    df <- data.frame(
      id = rep(1:5, each=5),
      a = runif(25, 2, 50)
    )
    
    ui = {dashboardPage(
      dashboardHeader(),
      dashboardSidebar(),
      dashboardBody(
        splitLayout(cellWidths = c("50%", "50%"), 
                    plotOutput("boxplot"),
                    plotOutput("vioplot")
        )
      )
    )}
    
    server <- function(input, output) {
      output$boxplot <- renderPlot({
        ggplot(df, aes(x=id, y=a, group=id)) + 
          geom_boxplot(aes(fill=id)) +
          facet_grid(~id, margins = T) +
          theme(rect=element_blank(),
                panel.grid = element_blank(),
                panel.background= element_blank(),
                plot.background = element_blank()
          )
      }, bg="transparent")
    
      output$vioplot <- renderPlot({
        ggplot(df, aes(x=id, y=a, group=id)) + 
          geom_violin(aes(fill=factor(id))) +
          facet_grid(~id, margins = T) +
          theme(rect=element_blank(),
                panel.grid = element_blank(),
                panel.background= element_blank(),
                plot.background = element_blank()
          )
      }, bg="transparent")
    }
    
    shinyApp(ui, server)
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Amanda    8 年前

    似乎当您使用renderplot在shiny中运行绘图时,它会将绘图保存为一个变量,这样当您调整页面大小时,绘图不会重新呈现,它只会再次显示图像。这似乎与透明背景有问题(可能是因为背景被保存为变量时设置的?我不确定这一点)。要防止这种情况,请在renderplot中将execonresize选项设置为true,这将重新绘制绘图,而不是调整保存图像的大小。例如:

    output$boxplot <- renderPlot({
    ggplot(df, aes(x=id, y=a, group=id)) + 
      geom_boxplot(aes(fill=id)) +
      facet_grid(~id, margins = T) +
      theme(rect=element_blank(),
            panel.grid = element_blank(),
            panel.background= element_blank(),
            plot.background = element_blank()
      )
    }, bg="transparent", execOnResize = TRUE)
    
    推荐文章