Ggplot2 ব্যবহার করে আর এর স্বচ্ছ পটভূমিতে গ্রাফিকগুলি কীভাবে তৈরি করবেন?


123

আমার স্বচ্ছ ব্যাকগ্রাউন্ড সহ আর জি থেকে পিএনজি ফাইলগুলিতে জিপিপ্লট 2 গ্রাফিকগুলি আউটপুট করতে হবে। বেসিক আর গ্রাফিক্সের সাথে সবকিছু ঠিক আছে তবে জিপিপ্লট 2 এর সাথে কোনও স্বচ্ছতা নেই:

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 এর সাথে স্বচ্ছ পটভূমি পাওয়ার কোনও উপায় আছে কি?


3
এইtheme(panel.background = element_rect(fill = "transparent", colour = NA), plot.background = element_rect(fill = "transparent", colour = NA))
উত্তরটিও

'উত্তর' অপ্রচলিত হওয়ার কারণে দয়া করে দ্বিতীয় উত্তর (ওয়াইআরসি দ্বারা) চিহ্নিত হিসাবে বিবেচনা করুন।
ডেভিট সারসসায়ান

উত্তর:


70

কিংবদন্তি পটভূমির জন্য 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
  ) 

দ্রুততম উপায়ে ব্যবহার করা হচ্ছে rect, যেহেতু আয়তক্ষেত্রের সমস্ত উপাদান আয়তকালের উত্তরাধিকার সূত্রে:

p <- p +
  theme(
        rect = element_rect(fill = "transparent") # all rectangles
      )
    p

আরও নিয়ন্ত্রিত উপায় হ'ল এর বিকল্পগুলি ব্যবহার করা theme:

p <- p +
  theme(
    panel.background = element_rect(fill = "transparent"), # bg of the panel
    plot.background = element_rect(fill = "transparent", color = NA), # 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

সংরক্ষণ করতে (এই শেষ পদক্ষেপটি গুরুত্বপূর্ণ):

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

1
যদি আপনি plot.backgroundউত্তরটির মতো রঙ সেট না করেন তবে আপনার প্লটের উপরে একটি অলস রূপরেখা থাকবে।
jsta

87

এছাড়াও একটি plot.backgroundবিকল্প রয়েছে panel.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()এবং element_rect()পরিবর্তে theme_rect(), ইত্যাদি ব্যবহার করবেন


প্ল্যাটফর্মের বর্তমান পাওয়ার পয়েন্টের সাথে পরীক্ষা করার সময় এটি কোনও ম্যাকের সাথে কাজ করার আশা করছিলাম না তবে এটি বিজ্ঞাপন হিসাবে কাজ করে। এবং এটি পিডিএফ এর সাথেও কাজ করে যদি আপনি ইউনিটগুলি অপসারণ করেন এবং মাপের পরিবর্তে মাপ ভাল কাজ।
আইআরটিএফএম

1
এটি এমএস পাওয়ারপয়েন্ট ২০১০-এর সাথে দুর্দান্ত কাজ করে,
ইউরি পেট্রোভস্কি

13
আপনি যদি ggsave ব্যবহার করছেন bg = "transparent"তবে png গ্রাফিক্স ডিভাইসে প্রবেশ করতে ভুলবেন না ।
টম

12
আপনি যদি knitrপ্যাকেজটি (বা slidifyইত্যাদি) ব্যবহার করেন তবে আপনাকে dev.args = list(bg = 'transparent')খণ্ড বিকল্প হিসাবে পাস করতে হবে । এখানে আরও বিশদ স্ট্যাকওভারফ্লো.com
অ্যান্ড্রু

3

কেবল ওয়াইসিআর এর উত্তর উন্নত করতে:

1) আমি এক্স এবং y অক্ষের উপর কালো লাইন যুক্ত করেছি। অন্যথায় এগুলি স্বচ্ছও করা হয়।

2) আমি কিংবদন্তী কীতে একটি স্বচ্ছ থিম যুক্ত করেছি। অন্যথায়, আপনি সেখানে একটি ফিল পাবেন, যা খুব উদ্বেগজনক হবে না।

অবশেষে, লক্ষ্য করুন যে এই সমস্তগুলি কেবল পিডিএফ এবং পিএনজি ফর্ম্যাট দিয়ে কাজ করে। jpeg স্বচ্ছ গ্রাফ উত্পাদন করতে ব্যর্থ।

MyTheme_transparent <- theme(
    panel.background = element_rect(fill = "transparent"), # bg of the panel
    plot.background = element_rect(fill = "transparent", color = NA), # 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
    legend.key = element_rect(fill = "transparent", colour = NA), # get rid of key legend fill, and of the surrounding
    axis.line = element_line(colour = "black") # adding a black line for x and y axis
)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.