Я заметил неожиданные белые квадраты, окружающие sf::geom_sf()
объекты, отображаемые в renderPlot()
из пользовательского интерфейса в Shiny, когда фон не белый.
Эта проблема не , кажется для других geom_
объектов в Shiny (но ... см. конец поста).
В идеале я хотел бы выяснить, как сделать так, чтобы ggplot2
объекты отображались в Shiny так, чтобы они соответствовалицвет фона.
Вот ссылка на короткий GIF в твиттере, показывающая несоответствие между обычными ggplot2()
объектами и geom_sf()
объектами в моих данных .
Код ниже кажется для работы:
library(shiny)
library(shinyWidgets)
library(ggplot2)
# Define UI for application that draws a histogram
ui <- fluidPage(#setBackgroundColor("#E5C595"),
# Application title
titlePanel("Old Faithful Geyser Data"),
# Sidebar with a slider input for number of bins
sidebarLayout(
sidebarPanel(
sliderInput("bins",
"Number of bins:",
min = 1,
max = 50,
value = 30)
),
# Show a plot of the generated distribution
mainPanel(
plotOutput("distPlot")
)
)
)
# Define server logic required to draw a histogram
server <- function(input, output) {
output$distPlot <- renderPlot({
# generate bins based on input$bins from ui.R
data <- as.data.frame(faithful[, 2])
colnames(data) <- "value"
bins <- seq(min(data), max(data), length.out = input$bins + 1)
ggplot(data, aes(x=value)) +
geom_histogram() +
theme(
axis.line = element_blank(),
axis.text.x = element_blank(),
axis.text.y = element_blank(),
axis.ticks = element_blank(),
axis.title.x = element_blank(),
axis.title.y = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
plot.background = element_rect("#E5C595", color = NA),
panel.background = element_rect("#E5C595", color = NA),
legend.background = element_rect("#E5C595", color = NA),
legend.box.background = element_rect("#E5C595", color = NA),
#panel.border = element_rect("transparent", color = NA)
)
})
}
# Run the application
shinyApp(ui = ui, server = server)
Я буду использовать простой пример из r-spatial.com дляпоказать проблему с geom_sf()
объектами.
library(shiny)
library(shinyWidgets)
library(ggplot2)
library(sf)
library(rnaturalearth)
library(rnaturalearthdata)
library(rgeos)
world <- ne_countries(scale = "medium", returnclass = "sf")
class(world)
# Define UI for application that draws a histogram
ui <- fluidPage(#setBackgroundColor("#E5C595"), # use shinywidgets to set background color
includeCSS("style.css"),
# Application title
titlePanel("Old Faithful Geyser Data"),
# Sidebar with a slider input for number of bins
sidebarLayout(
sidebarPanel(
sliderInput("bins",
"Number of bins:",
min = 1,
max = 50,
value = 30)
),
# Show a plot of the generated distribution
mainPanel(
plotOutput("distPlot")
)
)
)
# Define server logic required to draw a histogram
server <- function(input, output) {
output$distPlot <- renderPlot({
# generate bins based on input$bins from ui.R
data <- as.data.frame(faithful[, 2])
colnames(data) <- "value"
bins <- seq(min(data), max(data), length.out = input$bins + 1)
ggplot(data = world) +
geom_sf() +
theme(
axis.line = element_blank(),
axis.text.x = element_blank(),
axis.text.y = element_blank(),
axis.ticks = element_blank(),
axis.title.x = element_blank(),
axis.title.y = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
plot.background = element_rect("#E5C595", color = NA),
panel.background = element_rect("#E5C595", color = NA),
legend.background = element_rect("#E5C595", color = NA),
legend.box.background = element_rect("#E5C595", color = NA),
#panel.border = element_rect("transparent", color = NA)
)
})
}
# Run the application
shinyApp(ui = ui, server = server)
Обратите внимание, что я использовал library(shinyWidgets)
для простоты. Та же проблема возникает, если в файле .css
установлено следующее:
body {background-color: # E5C595;}
Еще одна странная вещь - это тот пример, что кажется для работы все еще имеет артефакт белой линии, который вы можете видеть ...