Ich versuche herauszufinden, wie man downloadButton verwendet, um eine Handlung mit glänzendem zu speichern. Das Beispiel im Paket zeigt downloadButton / downloadHandler zum Speichern einer CSV-Datei. Darauf aufbauend werde ich ein reproduzierbares Beispiel machen.
Zum ui.R
shinyUI(pageWithSidebar(
headerPanel('Downloading Data'),
sidebarPanel(
selectInput("dataset", "Choose a dataset:",
choices = c("rock", "pressure", "cars")),
downloadButton('downloadData', 'Download Data'),
downloadButton('downloadPlot', 'Download Plot')
),
mainPanel(
plotOutput('plot')
)
))
Zum server.R
library(ggplot2)
shinyServer(function(input, output) {
datasetInput <- reactive({
switch(input$dataset,
"rock" = rock,
"pressure" = pressure,
"cars" = cars)
})
plotInput <- reactive({
df <- datasetInput()
p <-ggplot(df, aes_string(x=names(df)[1], y=names(df)[2])) +
geom_point()
})
output$plot <- renderPlot({
print(plotInput())
})
output$downloadData <- downloadHandler(
filename = function() { paste(input$dataset, '.csv', sep='') },
content = function(file) {
write.csv(datatasetInput(), file)
}
)
output$downloadPlot <- downloadHandler(
filename = function() { paste(input$dataset, '.png', sep='') },
content = function(file) {
ggsave(file,plotInput())
}
)
})
Wenn Sie diese Frage beantworten, sind Sie wahrscheinlich damit vertraut. Um dies zu erreichen, speichern Sie die oben genannten Informationen in separaten Skripten ( ui.R
und server.R
in einem Ordner ( foo
) im Arbeitsverzeichnis. Um die glänzende App auszuführen, führen Sie sie aus runApp("foo")
.
Bei Verwendung ggsave
erhalte ich eine Fehlermeldung, dass ggsave die filename
Funktion nicht verwenden kann (glaube ich). Wenn ich das Standard-Grafikgerät (wie unten) verwende, Download Plot
funktioniert das fehlerfrei, aber die Grafik wird nicht geschrieben.
Alle Tipps, um downloadHandler zum Schreiben von Plots zu bewegen, sind willkommen.
ggsave(file, plotInput(), device = png)
eine Gerätefunktion (Wrapper) verwenden, anstatt sie zu erstellen.Hier ist eine Lösung, mit der Sie ggsave zum Speichern glänzender Diagramme verwenden können. Es verwendet ein logisches Kontrollkästchen und eine Texteingabe zum Aufrufen
ggsave()
. Fügen Sie dies derui.R
Datei hinzusidebarPanel
:Fügen Sie dies dann
server.R
anstelle der aktuellenoutput$plot
reactivePlot-Funktion zur Datei hinzu :Ein Benutzer kann dann den gewünschten Dateinamen in das Textfeld (ohne Erweiterung) eingeben und das Kontrollkästchen aktivieren, um es im App-Verzeichnis zu speichern. Wenn Sie das Kontrollkästchen deaktivieren, wird das Diagramm erneut gedruckt. Ich bin mir sicher, dass es bessere Möglichkeiten gibt, dies zu tun, aber zumindest kann ich jetzt ggsave und cairo in Windows für viel schönere PNG-Grafiken verwenden.
Bitte fügen Sie Ihre Vorschläge hinzu.
quelle
isolate
Block um dasinput$filename
wird bei jeder Änderung desfilename
Textfelds auch ein Speichern der Datei veranlasst, wenn das Kontrollkästchen aktiviert ist.Ich habe es nicht geschafft, damit es funktioniert
ggsave
, aber mit einem Standardaufrufpng()
scheint es in Ordnung zu sein.Ich habe nur den
output$downloadPlot
Teil Ihrerserver.R
Datei geändert :Beachten Sie, dass ich einige Probleme mit der Version 0.3 von shiny hatte, aber es funktioniert mit der neuesten Version von Github:
quelle
Dies ist alt, aber immer noch der Top-Hit, wenn jemand "R shiny save ggplot" googelt, also werde ich eine weitere Problemumgehung beitragen. Sehr einfach ... rufen Sie ggsave in derselben Funktion auf, in der Ihr Diagramm angezeigt wird, wodurch das Diagramm als Datei auf dem Server gespeichert wird.
Verwenden Sie dann downloadHandler und
file.copy()
schreiben Sie Daten aus der vorhandenen Datei in den Parameter "file".Funktioniert bei mir.
quelle