2016-04-25 5 views
0

У меня возникают некоторые трудности с plotly. Я хотел бы иметь возможность скачать plotly в формате pdf. Однако при добавлении к моему коду некоторых параметров оси х и у (причины, если я передать ggplot в plotly, название оси х и у вырезано)GGPlotly: downloadHandler дает пустой сюжет

Этот код работает, чтобы загрузить PDF-файл:

library(shiny) 
library(DT) 
library(ggplot2) 
library(plotly) 


shinyApp(
    ui = fluidPage(
    fluidRow(downloadButton('downloadplot',label='Download Plot')), 
    plotlyOutput('plot1') 
), 
    server = function(input, output) { 

    testplot <- function(){ 

a <- ggplot(mtcars, aes(x = interaction(cyl, carb, lex.order = T), y = mpg,fill = interaction(cyl, carb, lex.order = T))) + 
    geom_boxplot() 

    } 

    output$plot1 <- renderPlotly({testplot()}) 

    output$downloadplot <- downloadHandler(
     filename ="plot.pdf", 
     content = function(file) { 
     pdf(file, width=12, height=6.3) 
     print(testplot()) 
     dev.off() 
     })}) 

и добавление этого кода, чтобы исправить титулы ggplotly терпит неудачу:

a <- ggplot(mtcars, aes(x = interaction(cyl, carb, lex.order = T), y = mpg,fill = interaction(cyl, carb, lex.order = T))) + 
    geom_boxplot() 

p <- ggplotly(a + ylab(" ") + xlab(" ")) 
x <- list(
    title = "[x]" 
) 
y <- list(
    title = "[y]" 
) 
p %>% layout(xaxis = x, yaxis = y)} 

дает пустой участок ...

Спасибо за любую помощь!

+0

Но где именно я должен использовать 'возвращение (а)' ..Than мне нужно использовать, если заявление на 'downloadHandler' –

+0

Если у вас есть plotly user_name и т.д. Вы можете использовать' plotly_IMAGE' для этого. или вам нужно использовать разные функции для сюжетной линии и одну для pdf ggplot – Batanichek

+0

У меня нет имени пользователя plotly. Проблема с 'plotly' заключается в том, что я не могу использовать ** графически загружаемую кнопку изображения ** в Internet Explorer, поэтому единственным решением является добавление' downlaodHandler', который собирается предоставить мне файл pdf –

ответ

0

Я решил свой вопрос. Решение не изящно, но оно работает!

Итак, трюк заключается в том, чтобы установить x и y заголовки в renderPlotly и НЕ в testplot() функции.

Однако заголовки оси x и y должны быть дополнительно введены в testplot(). Это значит, что это будет наш выход в формате pdf, а вид графика выполнен с помощью plotly.

Вот код:

library(shiny) 
library(DT) 
library(ggplot2) 
library(plotly) 


shinyApp(
    ui = fluidPage(
    fluidRow(downloadButton('downloadplot',label='Download Plot')), 
    plotlyOutput('plot1') 
), 
    server = function(input, output) { 

    testplot <- function(){ 

     a <- ggplot(mtcars, aes(x = interaction(cyl, carb, lex.order = T), y = mpg,fill = interaction(cyl, carb, lex.order = T))) + 
     geom_boxplot() 

    } 

    output$plot1 <- renderPlotly({ 

     p <- ggplotly(testplot() + ylab(" ") + xlab(" ")) 
     x <- list(
     title = "[x]" 
    ) 
     y <- list(
     title = "[y]" 
    ) 
     p %>% layout(xaxis = x, yaxis = y)}) 

    output$downloadplot <- downloadHandler(
     filename ="plot.pdf", 
     content = function(file) { 
     pdf(file, width=12, height=6.3) 
     print(testplot()) 
     dev.off() 
     })}) 
Смежные вопросы