Q: 12 ggplot2で透明な背景にする方法
12.1 Q
ggplot2
で作成したグラフィックを、背景が透明なPNGに出力する必要があります。基本Rグラフィックならうまくいくのですが、ggplot2
だと透明になりません:
d <- rnorm(100) #ランダムデータ生成
# これなら透明背景のPNGができます
png('tr_tst1.png',width=300,height=300,units="px",bg = "transparent")
boxplot(d)
dev.off()
# ggplot2でオブジェクト作成
df <- data.frame(y=d,x=1)
p <- ggplot(df) + stat_boxplot(aes(x=x,y=y))
p <- p + theme(
panel.background = element_rect(fill = "transparent",color = NA),
panel.grid.minor = element_line(color = NA),
panel.grid.major = element_line(color = NA)
)
# でもこれだと背景が白くなります
png('tr_tst2.png',width=300,height=300,units="px",bg = "transparent")
p
dev.off()
※ 評価させていません
ggplot2
で透明背景を出力させる方法はあるのでしょうか。
12.2 A
上記のtheme()
設定では、plot.background
を透明指定していません。まずは以下のようにggplot2
のオブジェクトを作成します:
d <- rnorm(100)
df <- data.frame(y=d,x=1)
p <- ggplot(df) + stat_boxplot(aes(x = x,y=y))
p <- p + theme(
panel.background = element_rect(fill = "transparent",color = NA),
panel.grid.minor = element_line(color = NA),
panel.grid.major = element_line(color = NA),
plot.background = element_rect(fill = "transparent",color = NA) #ここを追加
)
p
これで、背景要素が透明になります。これをPNG形式に出力するにはggsave
が便利です:
ggsave("tr_tst3.png", p, bg = "transparent")
※ 評価させていません
?ggsave
にはbg
という引数はありませんが、その他の引数はこの場合graphics deviceにそのまま送られるため、透明処理が働きます。逆にこの引数を設定しないと透明にならず白色になります。
また、knitrなどで出力する場合には、チャンクオプションとしてdev.args=list(bg='transparent)
の記述が必要です:
{r hogehoge, dev.args = list(bg = 'transparent')}
この際も、出力するggplot2
のオブジェクトには、背景要素を全て透明に設定しておいてください。
12.3 参照
この記事は、StackOverflowに投稿された以下の記事を参考に、現在のggplot2
のバージョンにあうようにコードを編集し、一部内容を変更して作成しました: - How to make graphics with transparent background in R using ggplot2? - Stack Overflow
関連記事・ドキュメント: - How to use a “R-generated” plot as a semi-transparent background in an HTML5 slide made by knitr? - Stack Overflow - theme. ggplot2 0.9.3.1