Делаете пэчворк совместимым с создателем PDF с помощью DownloadHandler в Shiny?
Я заинтересован в использовании пакета patchwork для организации набора графиков, который конечный пользователь может затем загрузить с помощью кнопки загрузки. Для простоты в этом примере я показал только один график.
Пример сценария:
library(shiny)
library(tidyverse)
library(Cairo)
library(grDevices)
ui <- fluidPage(
mainPanel(
tabsetPanel(
tabPanel(
"PDF this plot with patchwork",
plotOutput("diamonds"),
downloadButton("downloadPlot", "Download Plot")
)
)
)
)
server <- function(input, output, session){
output$diamonds <- renderPlot({
ggplot(diamonds, aes(x=carat, y=price, color=cut)) + geom_point() + geom_smooth()
})
output$downloadPlot <- downloadHandler(
filename = "my_plot.pdf",
content = function(file){
cairo_pdf(filename = file,
width = 18, height = 10, pointsize = 12, family = "sans", bg = "transparent",
antialias = "subpixel",fallback_resolution = 300)
patchwork::wrap_plots(ggplot(diamonds, aes(x=carat, y=price, color=cut)) + geom_point() + geom_smooth())
dev.off()
},
contentType = "application/pdf"
)
}
shinyApp(ui=ui, server=server)
В этом случае сгенерированный PDF-файл будет пустым. Я посмотрел на этот соответствующий вопрос, и если я заменюpatchwork::wrap_plots
с gridExtra::grid.arrange
, приложение теперь работает, но есть много причин, по которым я бы предпочел использовать patchwork
которых я не показал (название сюжета, субтитры и т. д.). Для моего настоящего сценария я тоже не заинтересован в использовании Markdown.