Rのgtで作った表を透過する方法
gt
で作成した表をR上透過して保存する方法
具体的には、背景色のついたスライドにgt
で作った表を貼りたい状況などを想定しています。gt
やgtsave
だけではどうやらできない & (常識なのかもしれませんが)少し調べた所では方法が分からなかったのでメモしておきます。
R上で完結したより良い方法・代替案があればお教えください。
ggplot2
で作成したグラフを透過して保存する方法としては、
p <- p + theme(plot.background = element_rect(fill="transparent", color=NA))
ggsave("ファイル名.png",p,bg="transparent")
とすれば良いのは有名かと思います。なお、単にtheme
で透過するように設定しておいても、bgを指定しなかったり、Rstudioのexportから書き出したりすると透過されません。
gt
やgtsave
はggplotの表版のようなパッケージとして知られていますが、これらのオプションはどうやら存在しません。
調べたところstackoverflowやVolcengine(中国版のstackoverflowみたいなもの)がヒットしましたが、どちらの方法もうまく行きませんでした。
これらの方法についても後ろでご紹介しますが、アップデート等で使えなくなった等の可能性もあるかと思います。この点何かご存知の方いらしたら教えていただけると嬉しいです。Rのバージョンは4.3.1です。
gt
で作成した表を透過
library(gtsummary)
library(magick)
h=head(iris)
table=h %>%
gt() %>%
tab_options(table.background.color = "white")
とすると、背景色が白の表が作成されるので、magick
パッケージを用いて
img_t=img%>%
image_transparent(color="white") #指定色の部分(ここでは白)を透過
image_write(img_t, "table.tp.png")
とすることで背景を透過することができます。
ここでは白を使っていますが、図中の文字などと色が被っていなければなんでも良いです。
これでできるものの、なんだかもっと良い方法がありそうな気がするので、知っている方がいらしたら教えていただきたいです。
検索すると出てくるがうまくいかない方法
①背景色を透明に指定
stackoverflowの方ではCSSカラーコードで透明度を指定し
tab_options(table.background.color = "#FFFFFF00")
とすれば良いとなっていますが、これによって得られた表をgtsave
で保存すると透明度を指定せずに
tab_options(table.background.color = "#FFFFFF")
とした場合と変わらない結果になってしまいます。なお、
tab_options(table.background.color = "transparent")
でも同じです。
この「背景を透明に指定しても、単に書き出すと不透明になっている」のはggplot2
でも同じ(こうなる理由をご存知でしたら教えていただきたいです)なのですが、gtsave
はggsave
と違ってbg
が引数にありません。stackoverflowにはこの点を勘違いしたコメントも付いているように見えます。
②magickを使用
Volcengineの方ではmagick
パッケージを利用してアルファ値を指定しようとしているのか
image_convert(img, "-alpha set -channel a -evaluate set 0.5", "table_img.png")
となっていますが、Rのヘルプを見てもimage_convertはこのような引数をとる関数ではありません(この点も何かご存知の方いらしたら教えてください)。