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 rect
ya 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.