Ich muss ggplot2-Grafiken von R in PNG-Dateien mit transparentem Hintergrund ausgeben. Mit einfachen R-Grafiken ist alles in Ordnung, aber mit ggplot2 keine Transparenz:
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()
Gibt es eine Möglichkeit, mit ggplot2 einen transparenten Hintergrund zu erhalten?
r
graphics
transparency
ggplot2
Yuriy Petrovskiy
quelle
quelle
theme(panel.background = element_rect(fill = "transparent", colour = NA), plot.background = element_rect(fill = "transparent", colour = NA))
Antworten:
Aktualisiert mit der
theme()
Funktionggsave()
und dem Code für den Legendenhintergrund:Der schnellste Weg ist die Verwendung von using
rect
, da alle Rechteckelemente von rect erben:Eine kontrolliertere Möglichkeit besteht darin, folgende Optionen zu verwenden
theme
:Speichern (dieser letzte Schritt ist wichtig):
quelle
plot.background
Farbe nicht wie in der Antwort oben einstellen, hat Ihr Plot einen schwachen Umriss.Es gibt auch eine
plot.background
Option zusätzlich zupanel.background
:Aus irgendeinem Grund wird das hochgeladene Bild anders angezeigt als auf meinem Computer, daher habe ich es weggelassen. Aber für mich bekomme ich ein Grundstück mit einem völlig grauen Hintergrund, mit Ausnahme des Box-Teils des Boxplots, der noch weiß ist. Das kann ich auch mit der Füllästhetik im Boxplot-Geom ändern, glaube ich.
Bearbeiten
ggplot2 wurde inzwischen aktualisiert und die
opts()
Funktion ist veraltet. Derzeit würden Sietheme()
anstelle vonopts()
undelement_rect()
anstelle vontheme_rect()
usw. verwenden.quelle
bg = "transparent"
, um sie an das PNG-Grafikgerät weiterzuleiten.knitr
Paket (oderslidify
usw.) verwenden, müssen Sie esdev.args = list(bg = 'transparent')
als Chunk-Option übergeben. Weitere Details hier stackoverflow.com/a/13826154/561698Nur um die Antwort von YCR zu verbessern:
1) Ich habe schwarze Linien auf der x- und y-Achse hinzugefügt. Ansonsten werden sie auch transparent gemacht.
2) Ich habe dem Legendenschlüssel ein transparentes Thema hinzugefügt. Andernfalls erhalten Sie dort eine Füllung, die nicht sehr ästhetisch ist.
Beachten Sie schließlich, dass alle diese nur mit den Formaten pdf und png funktionieren. JPEG erzeugt keine transparenten Grafiken.
quelle