Saltar al contenido

¿Cómo hacer gráficos con fondo transparente en R usando ggplot2?

Deseamos enseñarte la mejor solución que hallamos online. Deseamos que te sea útil y si deseas comentarnos algo que nos pueda ayudar a mejorar siéntete libre de hacerlo..

Solución:

También hay una plot.background opción además de panel.background:

df <- data.frame(y=d,x=1)
p <- ggplot(df) + stat_boxplot(aes(x = x,y=y)) 
p <- p + opts(
    panel.background = theme_rect(fill = "transparent",colour = NA), # or theme_blank()
    panel.grid.minor = theme_blank(), 
    panel.grid.major = theme_blank(),
    plot.background = theme_rect(fill = "transparent",colour = NA)
)
#returns white background
png('tr_tst2.png',width=300,height=300,units="px",bg = "transparent")
print(p)
dev.off()

Por alguna razón, la imagen cargada se muestra de manera diferente a la de mi computadora, así que la omití. Pero para mí, obtengo una trama con un fondo completamente gris, excepto por la parte del cuadro de la gráfica de caja, que sigue siendo blanca. Creo que eso también se puede cambiar usando la estética de relleno en la geom del gráfico de caja.

Editar

ggplot2 desde entonces se ha actualizado y el opts() la función ha quedado en desuso. Actualmente, usarías theme() en lugar de opts() y element_rect() en lugar de theme_rect()etc

Actualizado con el theme() función, ggsave() y el código para el fondo de la leyenda:

df <- data.frame(y = d, x = 1, group = rep(c("gr1", "gr2"), 50))
p <- ggplot(df) +
  stat_boxplot(aes(x = x, y = y, color = group), 
               fill = "transparent" # for the inside of the boxplot
  ) 

La forma más rápida es usando usando rectya que todos los elementos del rectángulo heredan de rect:

p <- p +
  theme(
        rect = element_rect(fill = "transparent") # all rectangles
      )
    p

Una forma más controlada es usar opciones de theme:

p <- p +
  theme(
    panel.background = element_rect(fill = "transparent"), # bg of the panel
    plot.background = element_rect(fill = "transparent", color = NA), # bg of the plot
    panel.grid.major = element_blank(), # get rid of major grid
    panel.grid.minor = element_blank(), # get rid of minor grid
    legend.background = element_rect(fill = "transparent"), # get rid of legend bg
    legend.box.background = element_rect(fill = "transparent") # get rid of legend panel bg
  )
p

Para guardar (este último paso es importante):

ggsave(p, filename = "tr_tst2.png",  bg = "transparent")

Solo para mejorar la respuesta de YCR:

1) Agregué líneas negras en los ejes x e y. De lo contrario, también se hacen transparentes.

2) Agregué un tema transparente a la leyenda. key. De lo contrario, obtendrá un relleno allí, que no será muy estético.

Finalmente, tenga en cuenta que todos estos funcionan solo con formatos pdf y png. jpeg no produce gráficos transparentes.

MyTheme_transparent <- theme(
    panel.background = element_rect(fill = "transparent"), # bg of the panel
    plot.background = element_rect(fill = "transparent", color = NA), # bg of the plot
    panel.grid.major = element_blank(), # get rid of major grid
    panel.grid.minor = element_blank(), # get rid of minor grid
    legend.background = element_rect(fill = "transparent"), # get rid of legend bg
    legend.box.background = element_rect(fill = "transparent"), # get rid of legend panel bg
    legend.key = element_rect(fill = "transparent", colour = NA), # get rid of key legend fill, and of the surrounding
    axis.line = element_line(colour = "black") # adding a black line for x and y axis
)

Valoraciones y reseñas

Recuerda que puedes dar recomendación a esta crónica si si solucionó tu problema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *