首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ShinyApp调整大小后,ggplot的透明背景发生变化

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

Stack Overflow用户
提问于 2018-06-05 07:30:45
回答 1查看 982关注 0票数 1

下面的代码显示了shinydashboard中的2个ggplot2-plots。绘图背景应始终为transparent,即使在调整大小后为

当启动应用程序时,绘图显示正确,但一旦调整屏幕大小,或关闭siderbar,背景再次变为白色。为什么会这样?我如何才能防止这种情况发生?

关闭侧边栏时,背景变为白色,重新打开侧边栏后,绘图再次切换为透明。但是当调整窗口大小时,它无论如何都不会变回透明。除非您将大小精确地调整为默认的窗口尺寸。我没能成功地测试它;)

这发生在RStudio和浏览器(Chrome,火狐)中。

我知道一种选择是将ggplot的背景颜色更改为ShinyApp的背景颜色。但我希望这不是唯一的。

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-05 07:54:49

似乎当你用renderPlot在shiny中运行绘图时,它会将绘图保存为一个变量,这样当你调整页面大小时,绘图不会重新渲染,它只会再次显示图像。这似乎与透明背景有问题(可能是因为背景保存为变量时设置了背景?在这一点上我不确定)。要避免这种情况,请在renderPlot中将execOnResize选项设置为TRUE,这将重新绘制绘图,而不是调整保存的图像的大小。例如:

代码语言:javascript
复制
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)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50690093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档