役に立ちそうだったので、メモを作成してみました。
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をいじってファイルに吐き出しています。