Triad sou.

forestplotパッケージのコードメモ

役に立ちそうだったので、メモを作成してみました。

library(forestplot)
library(dplyr)

dat1 <- read.table(textConnection("
l0	l1	l2	l3	l4	l5	hr	lcl	ucl
    Variable 1	100	50	50	0.83 (0.70,  0.99)	0.041	0.833	0.698	0.992
    Variable 2	100	50	50	2.34 (0.58,  9.51)	0.233	2.344	0.577	9.510
    Variable 3	100	50	50	0.44 (0.12,  1.58)	0.207	0.440	0.123	1.577
    Variable 4	100	50	50	1.50 (0.77,  2.90)	0.230	1.497	0.774	2.896
    Variable 5	100	50	50	2.12 (0.54,  8.26)	0.280	2.118	0.543	8.263
    Variable 6	100	50	50	2.03 (1.04,  3.99)	0.039	2.035	1.037	3.992
    Variable 7	100	50	50	0.85 (0.70,  1.02)	0.077	0.846	0.702	1.018
    Variable 8	100	50	50	0.97 (0.94,  1.01)	0.092	0.970	0.935	1.005
    Variable 9	100	50	50	0.43 (0.15,  1.25)	0.123	0.434	0.150	1.254
    Variable 10	100	50	50	1.81 (0.61,  5.41)	0.286	1.813	0.608	5.406
    Variable 11	100	50	50	2.63 (0.66, 10.49)	0.171	2.628	0.659	10.488
"), stringsAsFactors = FALSE, header = TRUE, sep = "\t")
dat1

dat1 %>%
  forestplot(
    mean = hr,
    lower = lcl,
    upper = ucl,
    labeltext = c(l0, l1, l2, l3, l4, l5),
    xlog = TRUE,
    lwd.ci = 3,
    boxsize = 0.25,
    ci.vertices.height = 0.2,
    vertices = TRUE,
    xticks.digits = 1
  ) %>%
  fp_set_style(
    box = "black",
    line = "black",
    summary = "black",
    align = "lccccc",
    hrz_lines = "black",
    txt_gp = fpTxtGp(ticks = gpar(cex = 1))
  ) %>%
  fp_add_header(
    l0 = " Variable",
    l1 = "N",
    l2 = "Label1",
    l3 = "(Label2)",
    l4 = "HR (95%CI)",
    l5 = "P-value"
  ) %>%
  fp_decorate_graph(graph.pos = 5) %>%
  fp_set_zebra_style("#EFEFEF") -> p1

svg("figure.svg", width = 10, height = 3.85)
plot(p1)
dev.off()

感想

forestplotパッケージはかなり高機能で、使いそうだなと思われるオプションが一通り揃っており、非常にカスタムしやすいと思います。
ヘルプに事例があまりついていないため、若干わかりにくい所はありますが、大体雰囲気で使えそうだなと思いました。

少し工夫した点

1列目の変数名とラベルには適宜スペースを入れて調整すると見栄えが良いです。
X軸の文字の大きさを変更するオプション txt_gp = fpTxtGp(ticks = gpar(cex = 1)) が調べてもなかなか分からずにかなり困りました。
個人的に、forest plotは幅をいい感じに調整し、高さをピッタリに詰めると見栄えが良くなると思いますので、そのようにwidthとheightをいじってファイルに吐き出しています。