Saya perlu mengeluarkan grafik ggplot2 dari file R ke PNG dengan latar belakang transparan. Semuanya baik-baik saja dengan grafik R dasar, tetapi tidak ada transparansi dengan 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()
Apakah ada cara untuk mendapatkan latar belakang transparan dengan ggplot2?
r
graphics
transparency
ggplot2
Yuriy Petrovskiy
sumber
sumber
theme(panel.background = element_rect(fill = "transparent", colour = NA), plot.background = element_rect(fill = "transparent", colour = NA))
Jawaban:
Diperbarui dengan
theme()
fungsi,ggsave()
dan kode untuk latar belakang legenda:Cara tercepat adalah menggunakan menggunakan
rect
, karena semua elemen persegi panjang diturunkan dari persegi:Cara yang lebih terkontrol adalah dengan menggunakan opsi
theme
:Untuk menyimpan (langkah terakhir ini penting):
sumber
plot.background
warna seperti jawaban di atas, plot Anda akan memiliki outline yang samar.Ada juga
plot.background
opsi selainpanel.background
:Untuk beberapa alasan, tampilan gambar yang diunggah berbeda dari pada komputer saya, jadi saya telah menghilangkannya. Tapi bagi saya, saya mendapatkan plot dengan background yang seluruhnya abu-abu kecuali untuk bagian kotak dari boxplot yang masih putih. Itu bisa diubah menggunakan estetika isian di boxplot geom juga, saya yakin.
Sunting
ggplot2 telah diperbarui dan
opts()
fungsinya sudah tidak digunakan lagi. Saat ini, Anda akan menggunakantheme()
alih- alihopts()
danelement_rect()
alih-alihtheme_rect()
, dll.sumber
bg = "transparent"
untuk meneruskan ke perangkat grafis png.knitr
paket (atauslidify
lain - lain), Anda harus mengirimkannyadev.args = list(bg = 'transparent')
sebagai opsi potongan. Lebih detail di sini stackoverflow.com/a/13826154/561698Hanya untuk meningkatkan jawaban YCR:
1) Saya menambahkan garis hitam pada sumbu x dan y. Kalau tidak, mereka juga dibuat transparan.
2) Saya menambahkan tema transparan ke kunci legenda. Jika tidak, Anda akan mendapatkan kepuasan di sana, yang tidak akan terlalu estetis.
Terakhir, perhatikan bahwa semua itu hanya berfungsi dengan format pdf dan png. jpeg gagal menghasilkan grafik transparan.
sumber