Как скачать ggplot как png с downloadHandler? В настоящее время я получаю несколько ошибок - PullRequest
0 голосов
/ 20 апреля 2020

У меня проблемы с загрузкой моего ggplot в виде файла png. Мой ggplot имеет функцию щелчка, поэтому, когда вы щелкаете по графику, порядок графика изменяется, поэтому у меня есть условие if и else в моем выводе renderPlot. Ниже приведена часть кода сервера:

output$plot1 <- renderPlot({   

    e <- as.character(input$AB1)
    k <- TCGA(e) #function for cancer data
    g <- MEANSD(e) #function for healthy data
    test <- rbind(k,g) #combine healthy with cancer data 
    test$Tissue <- as.factor(test$Tissue) #row names of graph as factor -- important to order the graph according to alphabet or value of expression

    if (plot_data$trigger %% 2 == 0) {
      gg1 <- ggplot(test, aes(x= test$Origin , y= as.numeric(test$r), fill = Can))+geom_bar(position = position_dodge(), stat="identity", colour = "grey") + theme(axis.text.x = element_text(angle = 90, hjust = 1)) + ggtitle(as.character(input$AB1)) + labs(y = "Expression level in log2(tpm+0.001) scale", x = "Tissue type (alphabetical order)")
    gg1
      } else {
      ggplot(test, aes(x= reorder(test$Origin, -test$r, sum) , y= as.numeric(test$r), fill = Can))+geom_bar(position = position_dodge(), stat="identity", colour = "grey") + theme(axis.text.x = element_text(angle = 90, hjust = 1)) + ggtitle(as.character(input$AB1)) +  labs(y = "Expression level in log2(tpm+0.001) scale", x = "Tissue type (expression level order)")

      }
     })

output$tumordown <- downloadHandler(
    filename = function () {
      paste(input$AB1, "png", sep = ".")
    },
    content = function (file) {

      ggsave(file, plot = gg1)

      dev.off()
    }
  )

Приведенный выше код дает мне ошибку Сохранение 5,76 x 4 в изображении Предупреждение: ошибка в ggsave: объект 'gg1' не найден [трассировка стека недоступна ]

ggsave(file, plot = ggplot(test, aes(x= test$Origin , y= as.numeric(test$r), fill = Can))+geom_bar(position = position_dodge(), stat="identity", colour = "grey") + theme(axis.text.x = element_text(angle = 90, hjust = 1)) + ggtitle(as.character(input$AB1)) + labs(y = "Expression level in log2(tpm+0.001) scale", x = "Tissue type (alphabetical order)")

и этот код дает мне: Сохранение 6,67 x 6,67 в изображении Предупреждение: Ошибка в: Вы передаете функцию в качестве глобальных данных. Вы неправильно написали аргумент data в ggplot() [Нет трассировки стека]

Мой первый вопрос: кто-нибудь знает, как обойти эту ошибку? Я проверил много примеров на этом сайте, но он все еще дает мне ошибки. Мой второй вопрос: если загрузка будет работать, можно ли сохранить условные графики if и else в одном png?

Большое спасибо за помощь!

1 Ответ

0 голосов
/ 20 апреля 2020

Сделайте свой график ggplot c в реактивном проводнике:

gg1 <- reactive({
  e <- as.character(input$AB1)
  k <- TCGA(e) #function for cancer data
  g <- MEANSD(e) #function for healthy data
  test <- rbind(k,g) #combine healthy with cancer data 
  test$Tissue <- as.factor(test$Tissue) #row names of graph as factor -- important to order the graph according to alphabet or value of expression
  if (plot_data$trigger %% 2 == 0) {
    gg <- ggplot(test, aes(x = test$Origin , y = as.numeric(test$r), fill = Can)) + 
      geom_bar(position = position_dodge(), stat="identity", colour = "grey") + 
      theme(axis.text.x = element_text(angle = 90, hjust = 1)) + 
      ggtitle(as.character(input$AB1)) + 
      labs(y = "Expression level in log2(tpm+0.001) scale", 
           x = "Tissue type (alphabetical order)")
  } else {
    gg <- ggplot(test, 
                 aes(x = reorder(test$Origin, -test$r, sum), 
                     y = as.numeric(test$r), 
                     fill = Can)) + 
      geom_bar(position = position_dodge(), stat="identity", colour = "grey") + 
      theme(axis.text.x = element_text(angle = 90, hjust = 1)) + 
      ggtitle(as.character(input$AB1)) +
      labs(y = "Expression level in log2(tpm+0.001) scale", 
           x = "Tissue type (expression level order)")
  }
  gg
})

Тогда

output$plot1 <- renderPlot({ gg1() })

И в downloadHandler:

ggsave(file, gg1())

И удалить dev.off().

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