2011-09-17 97 views
80

我需要從透明背景的R到PNG文件輸出ggplot2圖形。一切都確定了基本的R圖形,但GGPLOT2沒有透明度:如何使用ggplot2在R中使用透明背景製作圖形?

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() 

有沒有什麼辦法讓透明背景GGPLOT2?

+0

參見[此答案](http://stackoverflow.com/questions/41856399/how-plot-transparent-background-ggplot),當前溶膠ution是添加'theme(panel.background = element_rect(fill =「transparent」,color = NA),plot.background = element_rect(fill =「transparent」,color = NA))' –

回答

72

還有除了panel.background一個plot.background選項:

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(), 
    plot.background = theme_rect(fill = "transparent",colour = NA) 
) 
#returns white background 
png('tr_tst2.png',width=300,height=300,units="px",bg = "transparent") 
print(p) 
dev.off() 

出於某種原因,上傳的圖片顯示的是不同於我的電腦上,所以我省略了。但是對我來說,除了箱子裏仍然是白色的箱子外,我會得到一個完全灰色的背景。我相信,使用boxplot geom中的填充美學也可以改變這一點。

編輯

GGPLOT2進行了更新和opts()功能已被棄用。目前,你可以使用theme()代替opts()element_rect()代替theme_rect()

+0

我並不期待它在使用該平臺當前的PowerPoint進行測試時與Mac一起工作,但它的工作原理與廣告一樣。它也適用於pdf的,如果你刪除單位和以英寸替代大小好的工作。 –

+1

這對於MS Powerpoint 2010非常有用。實際上,我需要它適合於此目的。 –

+12

如果您使用ggsave,請不要忘記添加'bg =「transparent」'傳遞給png圖形設備。 – Tom

15

theme()功能,ggsave()和傳說背景的代碼更新:

df <- data.frame(y = d, x = 1, group = rep(c("gr1", "gr2"), 50)) 
p <- ggplot(df) + 
    stat_boxplot(aes(x = x, y = y, color = group) 
    , fill = "transparent" # for the inside of the boxplot 
) 

p <- p + 
    theme(
    panel.background = element_rect(fill = "transparent") # bg of the panel 
    , plot.background = element_rect(fill = "transparent") # bg of the plot 
    , panel.grid.major = element_blank() # get rid of major grid 
    , panel.grid.minor = element_blank() # get rid of minor grid 
    , legend.background = element_rect(fill = "transparent") # get rid of legend bg 
    , legend.box.background = element_rect(fill = "transparent") # get rid of legend panel bg 
) 
p 

或使用矩形,因爲所有的矩形元件從RECT繼承:

p <- p + 
    theme(
    rect = element_rect(fill = "transparent") # bg of the panel 
) 
p 

ggsave(p, filename = "tr_tst2.png", bg = "transparent")