Как сделать кнопку загрузки выходных данных за «многомерным» графиком? - PullRequest
0 голосов
/ 18 марта 2019

Доброе утро,

Я пытаюсь зафиксировать кнопку загрузки вывода за «многомерным» графиком, но пока у меня нет решения.Есть ли у вас идеи?

Вот пример кода:

ui <- fluidPage(

  titlePanel(
    sidebarLayout(
    sidebarPanel(
      wellPanel(h3("Feed the parameters below"))),

    mainPanel(
      tabsetPanel(
        tabPanel(
          h4("plot"),
          plotOutput(outputId = "plot"),
          downloadButton(outputId = "download_plot", label = "Download plot")))))))


server <- function(input, output){ 

  plot_input <- reactive({ 

      p <- ggplot(data=ChickWeight, aes(x=Time, y=weight, color=Diet, group=Chick)) + geom_line() 

    }) 

  output$plot <- renderPlot({

    print(plot_input())}, width = 1200, height = 800)}

output$download_plot <- downloadHandler(

  filename = function() { paste0("plot_", Sys.Date(), ".png") },

  content = function(file) {

    device <- function(..., width, height) {
      grDevices::png(..., height = 20, res = 300, units = "cm")}

    ggsave(file, plot = plot_input(), device = device)


  })


shinyApp(ui = ui, server = server) 

Ответы [ 2 ]

1 голос
/ 18 марта 2019

Если вам не нужно определять ширину и высоту в server, вы можете установить их в ui:

plotOutput(outputId = "plot", width = "1200px", height = "800px")

Таким образом, кнопка загрузки находится ниже графика.

1 голос
/ 18 марта 2019

Я предполагаю, что вы хотите, чтобы ваша кнопка "Скачать заговор" оставалась на заданном месте? Самое простое решение, о котором я могу подумать, - это просто переместить downloadButton вверх по главной панели следующим образом:

library(shiny)

ui <- fluidPage(

  titlePanel(
    sidebarLayout(
      sidebarPanel(
        wellPanel(h3("Feed the parameters below"))),

      mainPanel(
        downloadButton(outputId = "download_plot", label = "Download plot"), #  This 
                                                                              # is where I moved it to
        tabsetPanel(

          tabPanel(
            h4("plot"),
            plotOutput(outputId = "plot")
       # This is where the code-snippet used to be
           ))))))


server <- function(input, output){ 

  plot_input <- reactive({ 
    df <- ChickWeight
    p <- ggplot(data=df, aes(x=Time, y=weight, color=Diet, group=Chick)) + geom_line() 

  }) 

  output$plot <- renderPlot({

    print(plot_input())}, width = 1200, height = 800)}

output$download_plot <- downloadHandler(

  filename = function() { paste0("plot_", Sys.Date(), ".png") },

  content = function(file) {

    device <- function(..., width, height) {
      grDevices::png(..., height = 20, res = 300, units = "cm")}

    ggsave(file, plot = plot_input(), device = device)


  })


shinyApp(ui = ui, server = server) 

Вывод (кнопка «Загрузить» остается над сюжетом):

Download Button stays over the plot

...