用更简单的方式画森林图
獲取更多R語言知識,請關注公眾號:醫學和生信筆記
醫學和生信筆記,專注R語言在臨床醫學中的使用,R語言數據分析和可視化。主要分享R語言做醫學統計學、meta分析、網絡藥理學、臨床預測模型、機器學習、生物信息學等。
文章目錄
- 準備數據
- 畫圖
- 更改主題!!
- 編輯圖形
- 有亞組的森林圖
前面介紹了使用forestplot包畫森林圖:
這個包很強大,熟練使用可以自由調整各種細節,不過由于細節太多、自由度太高,反而不容易上手。
今天給大家介紹另外一個可以畫森林圖的R包:forestploter,幫助你快速畫出好看的森林圖。
準備數據
還是用上次用到過的數據,基本的畫圖理念是差不多的,都是把圖的內容看成是表格的形式,用空白或者NA填充空的單元格。
數據準備比forestplot包簡單一點,文字數據和畫“森林”的數據,一起放在一個數據框中即可。
tabletext <- data.frame(# 文本數據study = c("Auckland", "Block", "Doran", "Gamsu", "Morrison", "Papageorgiou", "Tauesch", "Summary"),steroid = c("36", "1", "4", "14", "3", "1", "8", ""),placebo = c("60", "5", "11", "20", "7", "7", "10", ""),# 畫“森林需要的數據”mean = c(0.578, 0.165, 0.246, 0.700, 0.348, 0.139, 1.017, 0.531), lower = c(0.372, 0.018, 0.072, 0.333, 0.083, 0.016, 0.365, 0.386),upper = c(0.898, 1.517, 0.833, 1.474, 1.455, 1.209, 2.831, 0.731) )# 增加一列 tabletext$`HR (95% CI)` <- ifelse(is.na(tabletext$mean), "",sprintf("%.2f (%.2f to %.2f)",tabletext$mean, tabletext$lower, tabletext$upper))# 增加一列空值用于畫“森林” tabletext$` ` <- paste(rep(" ", 8), collapse = " ")tabletext ## study steroid placebo mean lower upper HR (95% CI) ## 1 Auckland 36 60 0.578 0.372 0.898 0.58 (0.37 to 0.90) ## 2 Block 1 5 0.165 0.018 1.517 0.16 (0.02 to 1.52) ## 3 Doran 4 11 0.246 0.072 0.833 0.25 (0.07 to 0.83) ## 4 Gamsu 14 20 0.700 0.333 1.474 0.70 (0.33 to 1.47) ## 5 Morrison 3 7 0.348 0.083 1.455 0.35 (0.08 to 1.46) ## 6 Papageorgiou 1 7 0.139 0.016 1.209 0.14 (0.02 to 1.21) ## 7 Tauesch 8 10 1.017 0.365 2.831 1.02 (0.36 to 2.83) ## 8 Summary 0.531 0.386 0.731 0.53 (0.39 to 0.73) ## ## 1 ## 2 ## 3 ## 4 ## 5 ## 6 ## 7 ## 8數據就準備好了。
畫圖
# 加載R包 library(forestploter)最基本的畫圖:
p <- forest(data = tabletext[,c(1:3,8,7)], # 選擇文字部分,這里選了5列,# 其中4列是要呈現的文字信息,還有1列空值用于畫“森林”lower = tabletext$lower, # 可信區間下限upper = tabletext$upper, # 可信區間上限est = tabletext$mean, # 估計值ci_column = 4 # “森林”出現在圖的第幾列)print(p)自動增加了色條,增加美感。
稍加美化:
p <- forest(data = tabletext[,c(1:3,8,7)],lower = tabletext$lower,upper = tabletext$upper,est = tabletext$mean,ci_column = 4,sizes = tabletext$mean, # 控制方框的大小is_summary = c(rep(FALSE,nrow(tabletext)-1), TRUE), # 最后一列是匯總行ref_line = 1, # 把豎線放到1的位置xlim = c(0,3), # x軸范圍ticks_at = c(0,1,2,3), # x軸刻度顯示arrow_lab = c("this better","that better"), # x軸下面的文字footnote = "A simple example of forestploter" # 左下角腳注)print(p)更改主題!!
這個包比較創新的地方就在于主函數forest只提供基本參數,更多的細節調整借助主題進行調整。
接下來我們就使用主題對森林圖進行一些美化。
# 自定義主題,修改各種細節 tm <- forest_theme(base_size = 10, # 基礎大小# 可信區間點的形狀,線型、顏色、寬度ci_pch = 16,ci_col = "#4575b4", # #762a83ci_lty = 1,ci_lwd = 1.5,ci_Theight = 0.2, # 可信區間兩端加短豎線# 參考線寬度、形狀、顏色refline_lwd = 1,refline_lty = "dashed",refline_col = "grey20",# 匯總菱形的填充色和邊框色summary_fill = "#4575b4",summary_col = "#4575b4",# 腳注大小、字體、顏色footnote_cex = 0.6,footnote_fontface = "italic",footnote_col = "blue")設置好之后,傳遞給theme參數即可
p1 <- forest(data = tabletext[,c(1:3,8,7)],lower = tabletext$lower,upper = tabletext$upper,est = tabletext$mean,ci_column = 4,is_summary = c(rep(FALSE,nrow(tabletext)-1), TRUE), # 最后一列是匯總行ref_line = 1, # 把豎線放到1的位置xlim = c(0,3), # x軸范圍ticks_at = c(0,1,2,3), # x軸刻度顯示arrow_lab = c("this better","that better"), # x軸下面的文字footnote = "A simple example of forestploter", # 左下角腳注theme = tm)print(p1)編輯圖形
除了使用主題外,該包還支持對圖形進行特定的調整,比如更改某一行的顏色,控制字體,增加空行等等,主要是通過下面4個函數實現的:
- edit_plot :改變特定行或列的字體和字體顏色
- add_underline:對特定的行增加邊框
- add_text:對特定的行或列增加文字
- insert_text:在特定的行前或后增加一行并增加文字
果然是很強啊!細節滿滿!而且非常方便,比forestplot包強多了!
有亞組的森林圖
還是用上次推文的數據。
rm(list = ls())df <- read.csv("../000files/forestplot.csv", header = T)df$` ` <- paste(rep(" ", 26), collapse = " ")# 改個列名 colnames(df)[4:7] <- c("HR(95%CI)","mean","low","high")df ## Subgroup AP PA HR(95%CI) mean low high ## 1 All patients NR 27.2 0.75(0.61-0.93) 0.75 0.61 0.93 ## 2 Baseling ECOG NA NA NA ## 3 0 NR 27.2 0.71(0.55-0.92) 0.71 0.55 0.92 ## 4 1 NR 26.4 0.86(0.58-1.28) 0.86 0.58 1.28 ## 5 Baseling BPI-SF NA NA NA ## 6 0~1 NR 27.2 0.71(0.54-0.94) 0.71 0.54 0.94 ## 7 2~3 25.5 NR 0.87(0.59-1.29) 0.87 0.59 1.29 ## 8 Bone metastases only at entry NA NA NA ## 9 Yes NR 27.2 0.68(0.48-0.96) 0.68 0.48 0.96 ## 10 No NR 27.5 0.81(0.61-1.06) 0.81 0.61 1.06 ## 11 Age NA NA NA ## 12 <65 NR NR 0.8(0.51-1.24) 0.80 0.51 1.24 ## 13 ≥65 NR 26.4 0.73(0.57-0.94 0.73 0.57 0.94 ## 14 ≥75 NR 23.8 0.71(0.51-1) 0.71 0.51 1.00 ## 15 Baseline PSA above median NA NA NA ## 16 Yes 26.9 23.8 0.72(0.43-0.94) 0.72 0.43 0.94 ## 17 No NR NR 0.77(0.38-1.09 0.77 0.38 1.09 ## 18 Baseline LDH above median NA NA NA ## 19 Yes NR 23.6 0.69(0.53-0.91) 0.69 0.53 0.91 ## 20 No NR 27.5 0.79(0.55-1.12) 0.79 0.55 1.12 ## 21 Baseline ALK-P above median NA NA NA ## 22 Yes NR 23.6 0.79(0.6-1.04) 0.79 0.60 1.04 ## 23 No NR 27.5 0.66(0.46-0.94) 0.66 0.46 0.94 ## 24 Region NA NA NA ## 25 North America NR 27.2 0.66(0.49-0.88) 0.66 0.49 0.88 ## 26 Other NR NR 0.89(0.65-1.22) 0.89 0.65 1.22太棒了,和之前的比較一下,你喜歡哪一個呢?
現在的:
之前的:
獲取代碼及示例數據請關注微信公眾號:醫學和生信筆記,號內搜索森林圖即可。
獲取更多R語言知識,請關注公眾號:醫學和生信筆記
醫學和生信筆記,專注R語言在臨床醫學中的使用,R語言數據分析和可視化。主要分享R語言做醫學統計學、meta分析、網絡藥理學、臨床預測模型、機器學習、生物信息學等。
總結
以上是生活随笔為你收集整理的用更简单的方式画森林图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: moodle php代码解读_基于PHP
- 下一篇: 网络安全笔记-DDoS攻击