Preciso gerar gráficos ggplot2 de arquivos R para PNG com fundo transparente. Tudo está bem com os gráficos R básicos, mas sem transparência com o 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()
Existe alguma maneira de obter um fundo transparente com o ggplot2?
r
graphics
transparency
ggplot2
Yuriy Petrovskiy
fonte
fonte
theme(panel.background = element_rect(fill = "transparent", colour = NA), plot.background = element_rect(fill = "transparent", colour = NA))
Respostas:
Atualizado com a
theme()
funçãoggsave()
e o código para o fundo da legenda:A maneira mais rápida é usar using
rect
, pois todos os elementos retangulares herdam de rect:Maneira mais controlada é usar opções de
theme
:Para salvar (este último passo é importante):
fonte
plot.background
cor como a resposta acima, sua plotagem terá um contorno fraco.Há também uma
plot.background
opção além depanel.background
:Por algum motivo, a imagem carregada está sendo exibida de maneira diferente da do meu computador, então eu a omiti. Mas para mim, recebo um gráfico com um fundo totalmente cinza, exceto pela parte da caixa do gráfico de caixa que ainda é branca. Isso também pode ser alterado usando a estética de preenchimento no geom boxplot, acredito.
Editar
O ggplot2 foi atualizado e a
opts()
função foi preterida. Atualmente, você usaria emtheme()
vez deopts()
e emelement_rect()
vez detheme_rect()
etc.fonte
bg = "transparent"
para passar para o dispositivo gráfico png.knitr
pacote (ouslidify
etc), precisará passardev.args = list(bg = 'transparent')
como uma opção de chunk. Mais detalhes aqui stackoverflow.com/a/13826154/561698Apenas para melhorar a resposta do YCR:
1) Adicionei linhas pretas nos eixos xey. Caso contrário, eles também serão transparentes.
2) Adicionei um tema transparente à legenda. Caso contrário, você receberá um preenchimento lá, o que não será muito estético.
Por fim, observe que todos trabalham apenas com os formatos pdf e png. JPEG falha ao produzir gráficos transparentes.
fonte