ggsave en el portapapeles en Windows
Me gustaría guardar un gráfico en mi portapapeles sin salir de RStudio en Windows. Algo similar se ha preguntado para gráficos base de R, pero me gustaría usar ggplot+ggsave.
Operación de ejemplo del gráfico:
“`{r}
library(tidyverse)
{
ggplot(data = mtcars, aes(y = mpg, x = wt)) + geom_point()
} %>%
ggsave("plot.png", .)
<pre><code><br />No es difícil, por supuesto, navegar hasta el directorio de trabajo/plot.png en el explorador de archivos, hacer clic derecho en el archivo y copiarlo, pero eso requiere clics adicionales y tiempo.
Una posible estrategia podría ser intentar copiarlo al portapapeles mediante una llamada al sistema(), por ejemplo:
“`{r}
library(tidyverse)
{
ggplot(data = mtcars, aes(y = mpg, x = wt)) + geom_point()
} %>%
ggsave(“plot.png”, .) %>%
{system( # comando de Windows aquí)}
pero estoy teniendo problemas para encontrar el comando correcto de Windows, al menos sin descargar utilidades adicionales. Dado que savePlot() de R base puede guardar en el portapapeles, debería haber alguna forma de hacerlo, ¿verdad?
davy.ai
Desafortunadamente, parece que actualmente no hay una manera sencilla de guardar directamente un ggplot en el portapapeles en Windows sin salir de RStudio o descargar utilidades adicionales. Como mencionaste, un enfoque posible sería utilizar
ggsave()
para guardar el gráfico en un archivo y luego usar una llamada asystem()
para copiar ese archivo en el portapapeles utilizando un comando de Windows. Sin embargo, encontrar el comando de Windows adecuado para lograr esto puede ser desafiante, especialmente si deseas evitar descargar utilidades adicionales.Una alternativa podría ser utilizar paquetes de R que proporcionan funciones para copiar datos en el portapapeles, como
clipr
oclipboard
. Por ejemplo, podrías guardar el gráfico como un archivo PNG usandoggsave()
, y luego usarclipr::write_clip()
oclipboard::write_clipboard()
para copiar el contenido binario del archivo en el portapapeles.Aquí hay un ejemplo:
“`{r}
library(tidyverse)
library(ggplot2)
library(clipr)
Generar un ggplot
mi_grafico <- ggplot(data = mtcars, aes(y = mpg, x = wt)) + geom_point()
Guardar el gráfico como un archivo PNG
ggsave(“grafico.png”, mi_grafico)
Leer el contenido binario del archivo en una variable
contenido_grafico <- readBin(“grafico.png”, what = “raw”, n = file.info(“grafico.png”)$size)
Copiar el contenido binario en el portapapeles
clipr::write_clip(contenido_grafico, format = “png”)
Este código utilizará
rsvg_grob()
del paquetersvg
para convertir el ggplot en código SVG, escribirá ese código en un archivo SVG temporal llamado “grafo-portapapeles.svg” y luego copiará el contenido de ese archivo en el portapapeles utilizandoclipboard::write_clipboard()
. Nuevamente, ten en cuenta que necesitarás tener los paquetesrsvg
yclipboard
instalados para utilizar este enfoque.