Los gráficos de ggplot en los scripts no se muestran en Rstudio

82

Tengo un problema extraño con Rstudio: si un script llama a las funciones de ggplot2 para mostrar un gráfico, el uso de Source para ejecutar el script no produce los gráficos. Si selecciono todo el guión con Ctrl+A, a continuación, ejecutar la línea o la selección actual ( Ctrl+Enter), entonces la trama hace visualización. Del mismo modo, escribir comandos de trazado en la consola produce una salida correcta.

Por ejemplo:

library(ggplot2)

p = ggplot(mtcars, aes(wt, mpg))
p + geom_point()

Solo producirá resultados si se pega en la consola, no si se obtiene.

Hay otras preguntas sobre esto, pero ninguna es útil:

¿Cómo puedo hacer que Rstudio muestre gráficos cuando se obtiene un script? Estoy usando Rstudio 0.98.1062 y R 3.1.1.

Supermejor
fuente

Respuestas:

129

La solución es llamar explícitamente print()al objeto ggplot:

library(ggplot2)

p <- ggplot(mtcars, aes(wt, mpg))
p <- p + geom_point()
print(p)

ggplotla función devuelve el objeto de la clase ggplot; ggplot2 funciona sobrecargando la printfunción para que se comporte de manera diferente en los objetos de la clase ggplot; en lugar de imprimirlos en STDOUT, crea un gráfico.

Todo funciona bien en modo interactivo, porque R asume que la mayoría de los comandos se ejecutan mediante print()función. Esto es para nuestra conveniencia y nos permite escribir rnorm(1)y obtener cualquier resultado visible. Cuando se usa el comando Ejecutar selección actual ( Ctrl+Enter), RStudio se comporta como si cada línea seleccionada se escribiera en modo interactivo y se ejecutara. Puede verificarlo verificando su historial de comandos en el Consolepanel después de ejecutar algunas líneas seleccionadas.

Pero este modo conveniente se abandona cuando el archivo es leído por source(). Dado que esta función está diseñada para ejecutar scripts de R (potencialmente largos y costosos desde el punto de vista informático), no es deseable contaminar STDOUT con mensajes de baja prioridad. Es source()por eso que, de forma predeterminada, solo generará un mensaje de error. Si quieres algo más, tienes que pedirlo explícitamente.

Mirek Długosz
fuente
20

aunque es una pregunta bastante antigua. Tuve el mismo problema y encontré una solución rápida, si desea utilizar el botón "fuente" en el cuadro de edición de R studio.

simplemente puede activar "fuente con eco" (Ctrl + Shift + Enter) y el gráfico se muestra como se esperaba

bcat
fuente
1
Genial, ¡no lo sabía! Eso se suma muy bien a la explicación dada por @ Mirosław Zalewski.
Uwe
9

Recientemente me encontré con esta pregunta y me di cuenta de que la forma más actualizada es llamar show(p)después de crear la trama.

Supermejor
fuente
¿Tiene alguna fuente de que esta sea la forma más actualizada? Todo lo que puedo encontrar es esto: ggplot2.tidyverse.org/reference/print.ggplot.html
Chris
2

Encontré esta pregunta al buscar un problema similar (las parcelas no aparecen en RStudio). Estaba tratando de solucionar un bloque ggplot2 complicado ejecutándolo en partes, pero no pude hacer que apareciera nada en la ventana del gráfico.

Motivo: la tiff()función que abrí antes no se había cerrado.

Solución: Ejecuté dev.off()varias veces hasta que se completaron todas mis tiff()funciones anteriores , luego pude crear gráficos en RStudio y ver los resultados en la ventana de gráficos.

Tania
fuente