いくつか方法があるらしい
ここでは
のプロットをアレンジした以下のようなプロットを用いる。
g = ggplot(df) + aes(x=y, y=n, fill=a) + geom_col(colour="black",position="stack") + scale_fill_manual(values=rev(mycolor)) + theme(panel.background=NULL,axis.title=element_blank(),axis.text=element_blank(),rect=element_blank(),line=element_blank()) plot(g)
plot(g) を以下のコードで置き換えればよい。
これをファイルに保存したい場合は grid::grid.draw(legend) の部分を png()、jpeg()、svg() 等と dev.off() で以下のように挟んでおけばよい。
上記のコードだと、コメントアウトしている当該の部分をアンコメントすると、保存される。
なお、width, height を適当に設定しておかないとかなり大きな余白が生じてしまう。
紙面の大きさに凡例を、もしくは凡例の大きさに紙面をオートフィットさせる方法があると良いのだが、現在の所、方法が不明のため捜索中。
library("lemon") # ... # plot(g) # を以下のコードで置き換える legend = lemon::g_legend(g) grid::grid.newpage() #png(file="legend_with_lemon.png", width=200, height=700, res=300) grid::grid.draw(legend) #dev.off()すると凡例だけが描画される。
これをファイルに保存したい場合は grid::grid.draw(legend) の部分を png()、jpeg()、svg() 等と dev.off() で以下のように挟んでおけばよい。
上記のコードだと、コメントアウトしている当該の部分をアンコメントすると、保存される。
なお、width, height を適当に設定しておかないとかなり大きな余白が生じてしまう。
紙面の大きさに凡例を、もしくは凡例の大きさに紙面をオートフィットさせる方法があると良いのだが、現在の所、方法が不明のため捜索中。
同じく、plot(g) を以下のコードで置き換えればよい。
library("gtable") #... # plot(g) # を以下のコードで置き換える legend = gtable::gtable_filter(ggplotGrob(g), "guide-box") grid::grid.newpage() #png(file="legend_with_gtable.png", width=200, height=700, res=300) grid::grid.draw(legend) #dev.off()
以下同様だが、grid::grid.draw() ではなく as_ggplot() を用いる。
library("ggpubr") # ... # plot(g) # を以下のコードで置き換える legend = get_legend(g) #png(file="legend_with_ggpubr.png", width=200, height=700, res=300) as_ggplot(legend) #dev.off()
- Hatena Blog / cucumber flesh / 2018-09-13: ggplot2ベースの図から凡例 (legend) のみ得る方法あれこれ
- stackoverflow / 2015-01-08: Save plot and legend to separate files?
- biostatistics / R / グラフィックス / 2018-02-15: グラフの保存
タグ
コメントをかく