hack のためのネタ帳, etc,,,

いくつか方法があるらしい

例示用のプロット

ここでは のプロットをアレンジした以下のようなプロットを用いる。
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)

lemon パッケージを使う方法

plot(g) を以下のコードで置き換えればよい。
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 を適当に設定しておかないとかなり大きな余白が生じてしまう。
紙面の大きさに凡例を、もしくは凡例の大きさに紙面をオートフィットさせる方法があると良いのだが、現在の所、方法が不明のため捜索中。

gtable パッケージを用いる方法

同じく、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()

ggpubr パッケージを用いる方法

以下同様だが、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()

参考

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます