Я заинтересован в использовании пакета 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.