2011-09-17 9 views
80

मुझे पारदर्शी पृष्ठभूमि के साथ आर से पीएनजी फ़ाइलों में ggplot2 ग्राफिक्स आउटपुट करने की आवश्यकता है। सब कुछ बुनियादी अनुसंधान ग्राफिक्स के साथ ठीक है, लेकिन ggplot2 के साथ कोई पारदर्शिता: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() 

वहाँ किसी भी तरह से ggplot2 के साथ पारदर्शी पृष्ठभूमि पाने के लिए है?

+0

भी देखें [इस उत्तर] (http://stackoverflow.com/questions/41856399/how-plot-transparent-background-ggplot), वर्तमान सोल ution 'थीम (पैनल.बैकग्राउंड = element_rect (fill = "पारदर्शी", रंग = एनए), plot.background = element_rect (fill = "पारदर्शी", रंग = एनए) जोड़ने के लिए है' ' –

उत्तर

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

किसी कारण से, अपलोड की गई छवि अपने कंप्यूटर पर की तुलना में अलग प्रदर्शित कर रहा है, तो मैं इसे हटा दिया है। लेकिन मेरे लिए, मुझे बॉक्सप्लॉट के बॉक्स हिस्से को छोड़कर पूरी तरह से भूरे रंग की पृष्ठभूमि के साथ एक साजिश मिलती है जो अभी भी सफेद है। बॉक्सप्लॉट जियोम में भरने सौंदर्य का उपयोग करके इसे बदला जा सकता है, मुझे विश्वास है।

संपादित

ggplot2 के बाद से अद्यतन किया गया है और opts() समारोह मान्य नहीं है। वर्तमान में, आप theme() बजाय opts() और theme_rect() के बजाय element_rect(), का प्रयोग करेंगे आदि

+0

मैं इसे उम्मीद नहीं कर रहा था उस प्लेटफॉर्म के वर्तमान पावरपॉइंट के साथ परीक्षण किए जाने पर मैक के साथ काम करें लेकिन यह विज्ञापित के रूप में काम करता है। और यह पीडीएफ के साथ भी काम करता है यदि आप इकाइयों को हटाते हैं और इंच में आकार बदलते हैं तो अच्छी नौकरी। –

+1

यह एमएस पावरपॉइंट 2010 के साथ उत्कृष्ट काम करता है। असल में, मुझे इस उद्देश्य के लिए सही चाहिए। –

+12

यदि आप ggsave का उपयोग कर रहे हैं, तो पीएनजी ग्राफिक्स डिवाइस को पास करने के लिए 'bg =" पारदर्शी "में जोड़ने के लिए मत भूलना। – 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 

या का उपयोग कर रेक्ट, सभी के रूप में आयत तत्वों रेक्ट से विरासत:

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

ggsave(p, filename = "tr_tst2.png", bg = "transparent") 
संबंधित मुद्दे