ggplot {ggplot2}を利用して作成したチャートとgt {gt}を利用して作成したテーブルを1枚の画像にまとめる方法

ggplot {ggplot2}を利用して作成したチャートと、gt {gt}を利用して作成したテーブルを1枚の画像にまとめる方法を確認します。

Rの ggplot2(チャート)と gt(表)は本来異なる仕組み(ベクター画像 vs HTML/LaTeX)で動いているため、直接結合することはできません。

そのため、gt の表を一度画像として保存し、それを ggplot の図として読み込んで結合する という方法で1枚の画像にします。

以下にRコード例を示します。

この例では、左側にチャート、右側に表を配置します。

library(dplyr)
library(ggplot2)
library(gt)
library(patchwork)
library(cowplot) # 画像を扱うために使用

# 1. ggplotでチャートを作成
p <- ggplot(mtcars, aes(x = wt, y = mpg, color = factor(cyl))) +
  geom_point(size = 3) +
  theme_minimal() +
  labs(title = "燃費と重量の関係")

# 2. gtで表を作成
t <- mtcars %>%
  head(10) %>%
  select(mpg, cyl, disp, wt) %>%
  gt() %>%
  tab_header(title = "データの先頭10行")

# 3. 表を一時的なPNG画像として保存
# gtの画像を保存するには webshot2 が裏で動きます
tmp_file <- tempfile(fileext = ".png")
gtsave(t, tmp_file)

# 4. 保存した画像をggplotオブジェクトとして読み込む
# cowplot::draw_image を使うと簡単に配置できますが、
# patchworkと組み合わせるために一度空のggplotに乗せます
table_plot <- ggdraw() + draw_image(tmp_file)

# 5. patchworkを使って結合
# plot_layoutを使って比率(幅)を調整できます
final_plot <- p + table_plot +
  plot_layout(ncol = 2, widths = c(1.5, 1)) # 左(チャート)を少し広く

# 6. 表示または保存
print(final_plot)

# ファイルとして保存する場合
# ggsave("combined_output.png", final_plot, width = 12, height = 6)
Figure 1

以上です。