ShinyApp调整大小后,ggplot的透明背景会发生变化

时间:2018-06-04 23:30:45

标签: r ggplot2 shiny resize shinydashboard

以下代码显示了ggplot2中的2 shinydashboard个图表。情节背景应始终透明,甚至调整大小后

图表在启动应用程序时显示正确,但是一旦屏幕调整大小或侧边栏关闭,背景就会再次变为白色。 为什么会这样,我该如何阻止?

关闭侧边栏时,背景变为白色,重新打开侧边栏后,图形再次切换为透明。 但是在调整窗口大小时,无论如何都不会变回透明状态。除非你可以精确调整默认窗口尺寸。我没有设法测试;)

这发生在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 个答案:

答案 0 :(得分:1)

似乎当您使用renderPlot运行闪亮的绘图时,它会将绘图保存为变量,这样当您调整页面大小时,绘图不会被重新渲染,它只会再次显示图像。这似乎与透明背景有问题(可能是由于在保存为变量时设置了背景?我不确定这一点)。要防止这种情况,请在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)