Muszę wypisać grafikę ggplot2 z plików R do PNG z przezroczystym tłem. Wszystko jest w porządku z podstawową grafiką R, ale brak przejrzystości w 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()
Czy jest sposób na uzyskanie przezroczystego tła za pomocą ggplot2?
r
graphics
transparency
ggplot2
Yuriy Petrovskiy
źródło
źródło
theme(panel.background = element_rect(fill = "transparent", colour = NA), plot.background = element_rect(fill = "transparent", colour = NA))
Odpowiedzi:
Zaktualizowano o
theme()
funkcjęggsave()
i kod tła legendy:Najszybszym sposobem jest użycie
rect
, ponieważ wszystkie elementy prostokąta dziedziczą po rect:Bardziej kontrolowanym sposobem jest użycie opcji
theme
:Aby zapisać (ten ostatni krok jest ważny):
źródło
plot.background
koloru, takiego jak odpowiedź powyżej, wykres będzie miał słaby zarys.Istnieje również
plot.background
opcja opróczpanel.background
:Z jakiegoś powodu przesłany obraz wyświetla się inaczej niż na moim komputerze, więc pominąłem go. Ale dla mnie otrzymuję wykres z całkowicie szarym tłem, z wyjątkiem części pudełkowej wykresu pudełkowego, która jest nadal biała. Wydaje mi się, że można to zmienić za pomocą estetyki wypełnienia w wykresie pudełkowym.
Edytować
ggplot2 został od tego czasu zaktualizowany, a
opts()
funkcja jest przestarzała. Obecnie używałbyśtheme()
zamiastopts()
ielement_rect()
zamiasttheme_rect()
itp.źródło
bg = "transparent"
aby przejść do urządzenia graficznego png.knitr
pakietu (lubslidify
itp.), musisz podaćdev.args = list(bg = 'transparent')
jako opcję porcji. Więcej szczegółów tutaj stackoverflow.com/a/13826154/561698Aby poprawić odpowiedź YCR:
1) Dodałem czarne linie na osi x i y. W przeciwnym razie są również przezroczyste.
2) Dodałem przezroczysty motyw do klucza legendy. W przeciwnym razie dostaniesz tam wypełnienie, które nie będzie zbyt estetyczne.
Na koniec zwróć uwagę, że wszystkie one działają tylko z formatami pdf i png. jpeg nie tworzy przezroczystych wykresów.
źródło