J'ai besoin de produire des graphiques ggplot2 à partir de fichiers R vers PNG avec un fond transparent. Tout va bien avec les graphiques R de base, mais pas de transparence avec 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-t-il un moyen d'obtenir un fond transparent avec ggplot2?
r
graphics
transparency
ggplot2
Yuriy Petrovskiy
la source
la source
theme(panel.background = element_rect(fill = "transparent", colour = NA), plot.background = element_rect(fill = "transparent", colour = NA))
Réponses:
Mis à jour avec la
theme()
fonctionggsave()
et le code de l'arrière-plan de la légende:Le moyen le plus rapide est d'utiliser
rect
, car tous les éléments du rectangle héritent de rect:Une manière plus contrôlée consiste à utiliser les options de
theme
:Pour sauvegarder (cette dernière étape est importante):
la source
plot.background
couleur comme la réponse ci-dessus, votre tracé aura un contour pâle.Il existe également une
plot.background
option en plus depanel.background
:Pour une raison quelconque, l'image téléchargée s'affiche différemment que sur mon ordinateur, je l'ai donc omise. Mais pour moi, j'obtiens un tracé avec un fond entièrement gris à l'exception de la partie boîte de la boîte à moustaches qui est toujours blanche. Cela peut également être changé en utilisant l'esthétique de remplissage dans le boxplot geom, je crois.
Éditer
ggplot2 a depuis été mis à jour et la
opts()
fonction est obsolète. Actuellement, vous utiliserieztheme()
au lieuopts()
etelement_rect()
au lieu detheme_rect()
, etc.la source
bg = "transparent"
pour passer au périphérique graphique png.knitr
package (ouslidify
etc), vous devez passerdev.args = list(bg = 'transparent')
comme une option de bloc. Plus de détails ici stackoverflow.com/a/13826154/561698Juste pour améliorer la réponse de YCR:
1) J'ai ajouté des lignes noires sur les axes x et y. Sinon, ils sont également rendus transparents.
2) J'ai ajouté un thème transparent à la clé de légende. Sinon, vous y obtiendrez un remplissage, ce qui ne sera pas très esthétique.
Enfin, notez que tout cela fonctionne uniquement avec les formats pdf et png. jpeg ne parvient pas à produire des graphiques transparents.
la source