Как скачать графический автоплот в Shiny? - PullRequest
0 голосов
/ 31 января 2019

У меня есть приложение Shiny, которое создает графику прогноза с помощью функции автоплотинга.В качестве входных данных пользователь может загрузить файл и выбрать количество месяцев для прогнозирования.Поэтому я работаю с реактивными данными.

Часть создания сюжета выглядит так:

forecast_graphic <- function() ({

if(is.null(data())){return()}

#create dataframe
df <- as.data.frame(data())
df <- select(df, column())
df <- as.data.frame(sapply(df, as.integer))

#create ts object and do data preprocessing for it
year <- as.integer(substr(startDatum(),1,4))
month <- as.integer(substr(startDatum(),6,7))
day <- as.integer(substr(startDatum(),9,10))

monthlyts <- ts(df, start =c(year,month,day), frequency = 12)

#create forecast model
ets <- ets(monthlyts)

#do forecasting
period <- as.integer(fcperiod())
forecastets <- forecast(ets, h= period)

#plot forecast
x <- autoplot(forecastets) +
  labs(x="Jahr", y = "") +
  ggtitle("") +
  scale_y_continuous(labels = format_format(big.mark = ".", decimal.mark = ",", scientific = FALSE)) +
  geom_forecast(h=period)

x

})

Теперь я хочу дать возможность загрузить графику.Я начинаю так, и загрузка также начинается, но никогда не заканчивается:

output$download3 <- renderUI({
  req(input$file)
  downloadButton('downloadData3', label = 'Download Diagramm')
})


 output$downloadData3 <- downloadHandler(
   #Specify filenames
   filename = function() {
  "forecast.png"
},

content = function(file){
 pdf(file)
 forecast_graphic()

}

Кто-нибудь имеет идею?

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Решение -

output$downloadData3 <- downloadHandler(
  filename = function() {
    "forecast.png"
  },
  content = function(file){
    pdf(file)
    print(forecast_graphic())
    dev.off()
  }
)

В качестве альтернативы, поскольку ваш график представляет собой ggplot, я думаю, вы можете сделать

output$downloadData3 <- downloadHandler(
  filename = function() {
    "forecast.png"
  },
  content = function(file){
    ggsave(file, forecast_graphic())
  }
)
0 голосов
/ 31 января 2019

Вы можете попробовать использовать plotly и функцию ggplotly() для достижения этой цели.В стандартный вывод, сгенерированный им, будет включена кнопка, дающая вам возможность Загрузить график в виде png (и другие полезные кнопки, такие как увеличение и уменьшение).

Ищите здесьруководство по его использованию и примеры: https://plot.ly/ggplot2/

Без тестирования на вашем примере я бы попробовал что-то вроде:

library(plotly)
ggplotly(x)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...