2017-03-21 1 views
1

J'aimerais que les utilisateurs finaux puissent exporter un fichier .png d'un graphique visNetwork construit et déployé avec Shiny. Je suis en mesure de le faire en utilisant une ligne visExport à la fin de mon code renderVisNetwork, mais je n'aime pas l'aspect du bouton qui est généré dans la sortie, le bouton lui-même est inclus sur le fichier .png exporté, et la qualité du .png lui-même n'est pas terrible. J'aime l'apparence du bouton généré par downloadButton dans l'interface utilisateur, mais je fais quelque chose de mal avec downloadHandler sur le serveur. En cours d'exécution dans le navigateur, je clique sur le bouton de téléchargement, j'obtiens la boîte de dialogue de téléchargement, et je suis capable de sauvegarder le fichier, mais le fichier est vide (taille du fichier de 318 octets). Essayer en .pdf ne fonctionne pas non plus. Voici mon code:L'exportation de visNetwork vers png avec downloadHandler dans Shiny (R) donne un fichier vide

ui.R:

downloadButton('ConDL', label='Download png') 

server.R:

# Create network 
ConNet <- function(){ 
    visNetwork(Nodes(), Edges()) %>% 
    #all the other stuff to create the network which works fine 
} 

# Draw visualization - works fine 
output$ConNet <- renderVisNetwork({ 
    ConNet() 
})  

# Download png of visualization - no errors displayed in browser or 
# console when testing, but exports blank png 
output$ConDL <- downloadHandler(
    filename="Con.png", 
    content= function(file) { 
     png(file) 
     ConNet() 
     dev.off() 
    } 
) 

J'ai suivi les conseils donnés ici sur la génération de l'objet avec une fonction au lieu d'un réactif: Downloading png from Shiny (R). Transformer les réactifs précédents qui alimentent ConNet en fonctions était également inefficace. J'ai l'application ouverte dans un navigateur (Firefox) plutôt que de parcourir le volet de prévisualisation. Essayer print(ConNet()) dans la section de contenu n'aide pas non plus, donc je ne suis pas sûr de ce que je manque.

Bonus si je peux obtenir le .png pour exclure les boutons de navigation produits avec visInteraction lorsque je crée le réseau - ils sont utiles pour la partie interactive, mais encombrent un graphique statique.

Répondre

1

Je ne comprends pas votre problème. Cela pourrait vous aider à download network from shiny API

+0

Oui, je suis tombé sur ce lien il y a un certain temps et finalement réglé sur cette solution. Le graphique exporté est en effet de qualité supérieure, et le code peut être modifié pour ajouter des titres qui ne sont pas nécessaires dans la version interactive mais utiles dans un téléchargement, soustraire des icônes de navigation qui ne seraient pas nécessaires dans la version téléchargeable, etc. Le seul inconvénient est que je reçois toujours le petit bouton "Exporter en png" dans le fichier .png lui-même, mais cela est rogné assez facilement avec d'autres logiciels. – bcarothers

+0

J'ai trouvé une solution très simple pour exporter le réseau avec une qualité supérieure. Si vous enregistrez votre réseau dans la page html, vous pouvez ouvrir ce fichier. Après cela, "clic droit" et "enregistrer l'image sous ...". Aussi incroyable que cela puisse paraître, la résolution est meilleure que visExport O_O. –

+0

Hah! Ce ^^^^ est la vraie réponse. Heck, je n'ai même pas à enregistrer en premier html - clic droit sur l'application elle-même quand il fonctionne fonctionne aussi bien et supprime tous les trucs étrangers tout en une seule étape. Une ligne de code dans l'interface utilisateur pour indiquer à l'utilisateur final de cliquer sur le bouton droit de la souris pour télécharger l'image surpasse les 60 lignes du côté serveur pour tout configurer. Merci! – bcarothers