调整 ShinyApp 大小后 ggplot 的透明背景发生变化
ggplot's transparent background changes after ShinyApp resizing
以下代码在 shinydashboard
中显示 2 个 ggplot2
-绘图。情节背景应始终透明,即使调整大小后。
启动应用程序时绘图显示正确,但一旦调整屏幕大小或关闭侧边栏,背景就会再次变为白色。 为什么会这样,我该如何预防?
关闭侧边栏时,背景变为白色,重新打开侧边栏后,绘图再次切换为透明。
但是当 window 调整大小时,它无论如何都不会变回透明。除非您将大小精确调整为默认的 window 尺寸。我没能测试 ;)
这发生在 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)
似乎当您 运行 使用 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)
以下代码在 shinydashboard
中显示 2 个 ggplot2
-绘图。情节背景应始终透明,即使调整大小后。
启动应用程序时绘图显示正确,但一旦调整屏幕大小或关闭侧边栏,背景就会再次变为白色。 为什么会这样,我该如何预防?
关闭侧边栏时,背景变为白色,重新打开侧边栏后,绘图再次切换为透明。 但是当 window 调整大小时,它无论如何都不会变回透明。除非您将大小精确调整为默认的 window 尺寸。我没能测试 ;)
这发生在 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)
似乎当您 运行 使用 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)