Necesito generar gráficos ggplot2 de archivos R a PNG con fondo transparente. Todo está bien con gráficos R básicos, pero no hay transparencia con ggplot2:
d <- rnorm(100) #generating random data
#this returns transparent png
png('tr_tst1.png',width=300,height=300,units="px",bg = "transparent")
boxplot(d)
dev.off()
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()
)
#returns white background
png('tr_tst2.png',width=300,height=300,units="px",bg = "transparent")
p
dev.off()
¿Hay alguna forma de obtener un fondo transparente con ggplot2?
r
graphics
transparency
ggplot2
Yuriy Petrovskiy
fuente
fuente
theme(panel.background = element_rect(fill = "transparent", colour = NA), plot.background = element_rect(fill = "transparent", colour = NA))
Respuestas:
Actualizado con la
theme()
funciónggsave()
y el código para el fondo de la leyenda:La forma más rápida es usar usando
rect
, ya que todos los elementos rectangulares heredan de rect:La forma más controlada es usar opciones de
theme
:Para guardar (este último paso es importante):
fuente
plot.background
color como la respuesta anterior, su trama tendrá un contorno tenue.También hay una
plot.background
opción además depanel.background
:Por alguna razón, la imagen cargada se muestra de manera diferente que en mi computadora, por lo que la he omitido. Pero para mí, obtengo una trama con un fondo completamente gris, excepto por la parte de la caja de la trama de la caja que todavía es blanca. Creo que eso también se puede cambiar usando la estética de relleno en el boxplot geom.
Editar
Desde entonces, ggplot2 ha sido actualizado y la
opts()
función ha quedado en desuso. Actualmente, usaría entheme()
lugar deopts()
y enelement_rect()
lugar detheme_rect()
, etc.fuente
bg = "transparent"
para pasar al dispositivo de gráficos png.knitr
paquete (oslidify
etc.), debe pasarlodev.args = list(bg = 'transparent')
como una opción fragmentaria. Más detalles aquí stackoverflow.com/a/13826154/561698Solo 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 clave de la leyenda. De lo contrario, obtendrá un relleno allí, que no será muy estético.
Finalmente, tenga en cuenta que todos esos funcionan solo con formatos pdf y png. JPEG no produce gráficos transparentes.
fuente