1. ホーム
  2. r

[解決済み] Rでggplot2を使って背景を透明にしたグラフィックを作るには?

2022-02-01 11:34:46

質問

Rからggplot2のグラフィックを背景が透明なPNGファイルに出力する必要があります。基本的なRのグラフィックスではすべてOKですが、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で背景を透明にする方法はありますか?

どのように解決するのですか?

を更新しました。 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 すべての矩形要素は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")