web-dev-qa-db-fra.com

Enregistrer tous les tracés déjà présents dans le panneau de Rstudio

J'ai fait différentes parcelles (plus d'une centaine) pour un projet et je ne les ai pas capturées en cours de route (oui c'est mauvais, je sais). Maintenant, je dois les enregistrer tous en même temps mais sans relancer mon script (ce qui prend des heures). Existe-t-il un moyen de le faire dans Rstudio?

Edit: Tous les intrigues sont déjà là et je ne veux pas les réexécuter.

13
Aman Gast

Dans RStudio, chaque session possède un répertoire temporaire qui peut être obtenu à l'aide de tempdir(). Dans ce répertoire temporaire, il y a un autre répertoire qui commence toujours par "rs-graphics" et contient tous les tracés enregistrés sous ".png" des dossiers. Par conséquent, pour obtenir la liste des ".png" fichiers, vous pouvez effectuer les opérations suivantes:

plots.dir.path <- list.files(tempdir(), pattern="rs-graphics", full.names = TRUE); 
plots.png.paths <- list.files(plots.dir.path, pattern=".png", full.names = TRUE)

Maintenant, vous pouvez copier ces fichiers dans le répertoire souhaité, comme suit:

file.copy(from=plots.png.paths, to="path_to_your_dir")



Fonctionnalité supplémentaire:

Comme vous le remarquerez, le .png les noms de fichiers sont générés automatiquement (par exemple, 0078cb77-02f2-4a16-bf02-0c5c6d8cc8d8.png). Donc, si vous voulez numéroter le .png fichiers selon leur ordre de traçage dans RStudio, vous pouvez le faire comme suit:

plots.png.detials <- file.info(plots.png.paths)
plots.png.detials <- plots.png.detials[order(plots.png.detials$mtime),]
sorted.png.names <- gsub(plots.dir.path, "path_to_your_dir", row.names(plots.png.detials), fixed=TRUE)
numbered.png.names <- paste0("path_to_your_dir/", 1:length(sorted.png.names), ".png")

# Rename all the .png files as: 1.png, 2.png, 3.png, and so on.
file.rename(from=sorted.png.names, to=numbered.png.names)

J'espère que ça aide.

15
TeeKea

Bien que cette discussion soit inactive depuis un certain temps, il y a certaines personnes, comme moi, qui rencontrent toujours le même problème, et les autres solutions ne semblent même pas vraiment comprendre la vraie question.

Alors, mains sur. L'historique de votre tracé est enregistré dans une variable appelée .SavedPlots. Vous pouvez soit y accéder directement, l'affecter à une autre variable dans le code ou faire cette dernière depuis la fenêtre des tracés.

# ph for plot history
ph <- .SavedPlots

Dans R 3.4.2, je pouvais indexer ph pour reproduire le tracé correspondant dans un périphérique. Ce qui suit est assez simple:

  1. Ouvrez un nouvel appareil (png, jpeg, pdf ...).
  2. Reproduisez votre intrigue ph[index_of_plot_in_history].
  3. Fermez l'appareil (ou continuez à tracer s'il s'agit d'un fichier PDF avec plusieurs pages).

Exemple:

for(i in 1:lastplot) {
    png('plotname.png')
    print(ph[i])
    dev.off()
}

Remarque: Parfois, cela ne se produit pas en raison d'une mauvaise programmation. Par exemple, j'utilisais le package MICE pour imputer de nombreux ensembles de données avec un grand nombre de variables et tracer comme indiqué dans la section 4.3 de cet article . Le problème était que seules trois variables par tracé étaient affichées, et si j'utilisais un périphérique png dans mon code, seul le dernier tracé de chaque jeu de données serait enregistré. Cependant, si les tracés étaient imprimés dans une fenêtre, tous les tracés de chaque ensemble de données seraient enregistrés.

4
Mr. Duhart

Si vos tracés sont en 3D, vous pouvez prendre un instantané de tous vos tracés et les enregistrer au format de fichier .png.

snapshot3d(filename = '../Plots/SnapshotPlots.png', fmt = 'png')

Ou bien, la meilleure façon est de créer une fenêtre de traçage à panneaux multiples en utilisant la fonction par(mfrow). Essayez ce qui suit

plotsPath = "../Plots/allPlots.pdf"
pdf(file=plotsPath)  

    for (x in seq(1,100))   
    {   
      par(mfrow = c(2,1))
      p1=rnorm(x)  
      p2=rnorm(x)  
      plot(p1,p2)   
    } 
    dev.off() 

Vous pouvez également utiliser les fonctions png, bmp, tiff et jpeg au lieu de pdf. Vous pouvez lire leurs avantages et leurs inconvénients et choisir celui qui vous convient le mieux.

1

Je ne sais pas comment Rstudio ouvre l'appareil où le tracé est tracé, mais je suppose qu'il utilise dev.new(). Dans ce cas, un moyen rapide d'enregistrer tous les graphiques ouverts consiste à parcourir tous les périphériques et à les écrire à l'aide de dev.print.

Quelque chose comme :

lapply(dev.list(),function(d){dev.set(d);dev.print(pdf,file=file.path(folder,paste0("graph_",d,".pdf"))})

folder est le chemin du dossier dans lequel vous souhaitez stocker votre graphique (pourrait être par exemple folder="~" si vous êtes sous linux et que vous souhaitez stocker tout votre graphique dans votre dossier personnel).

0
Simon C.