Прозрачный фон ggplot изменяется после изменения размера ShinyApp - PullRequest
0 голосов
/ 05 июня 2018

Следующий код показывает 2 ggplot2 -площадки в 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 голосов
/ 05 июня 2018

Кажется, что когда вы запускаете график в блестящем с renderPlot, он сохраняет график как переменную, так что когда вы изменяете размер страницы, график не перерисовывается, он просто показывает изображение снова.Похоже, что возникают проблемы с прозрачным фоном (возможно, из-за фона, который устанавливается, когда он сохраняется как переменная? Я не уверен в этом).Чтобы предотвратить это, установите для параметра execOnResize значение TRUE в renderPlot, это будет перерисовывать график вместо изменения размера сохраненного изображения.Например:

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)
...