2020-01-16-Forestplot包定制森林圖

獲取示例數(shù)據(jù)

如果能夠提供回歸分析的結(jié)果复亏,特別是使用非ascii字母會(huì)很方便。 在本節(jié)中私杜,示例數(shù)據(jù)是研究比較瑞典和丹麥之間進(jìn)行全髖關(guān)節(jié)置換術(shù)后1年與健康相關(guān)的生活質(zhì)量預(yù)后評(píng)估的比較:

library(forestplot)
data(HRQoL)
clrs <- fpColors(box="royalblue",line="darkblue", summary="royalblue")
tabletext <- 
  list(c(NA, rownames(HRQoL$Sweden)),
       append(list(expression(beta)), sprintf("%.2f", HRQoL$Sweden[,"coef"])))
forestplot(tabletext, 
           rbind(rep(NA, 3), 
                 HRQoL$Sweden),
           col=clrs,
           xlab="EQ-5D index")
image.png

更改字體設(shè)置

換個(gè)字體換種風(fēng)格:

tabletext <- cbind(rownames(HRQoL$Sweden),
                   sprintf("%.2f", HRQoL$Sweden[,"coef"]))
forestplot(tabletext, 
           txt_gp = fpTxtGp(label = gpar(fontfamily = "HersheyScript")),
           rbind(HRQoL$Sweden),
           col=clrs,
           xlab="EQ-5D index")
image.png

在gp-styles中還有選擇的可能性:

forestplot(tabletext, 
           txt_gp = fpTxtGp(label = list(gpar(fontfamily = "HersheyScript"),
                                         gpar(fontfamily = "",
                                              col = "#660000")),
                            ticks = gpar(fontfamily = "", cex=1),
                            xlab  = gpar(fontfamily = "HersheySerif", cex = 1.5)),
           rbind(HRQoL$Sweden),
           col=clrs,
           xlab="EQ-5D index")
image.png

置信區(qū)間

對(duì)于不確定的估計(jì)遭商,為了保持更感興趣的估計(jì)的分辨率,對(duì)區(qū)間進(jìn)行修剪是很方便的降狠。裁剪只是在置信區(qū)間中添加一個(gè)箭頭,請(qǐng)參見(jiàn)下面的最低估計(jì)值:

forestplot(tabletext, 
           rbind(HRQoL$Sweden),
           clip =c(-.1, Inf),
           col=clrs,
           xlab="EQ-5D index")
image.png

多個(gè)置信區(qū)間

當(dāng)將相同曝露的相似結(jié)果組合在一起時(shí)庇楞,我發(fā)現(xiàn)每行使用多個(gè)波段是很有用的榜配。這有效地增加了數(shù)據(jù)覆蓋度,同時(shí)使兩個(gè)波段之間的比較變得微不足道吕晌。作者在他的文章通過(guò)全髖關(guān)節(jié)置換術(shù)后1年對(duì)瑞典和丹麥患者進(jìn)行了比較蛋褥。在這里,由于丹麥樣本要小得多睛驳,所以剪輯也變得很明顯囚痴,從而產(chǎn)生了更寬的置信區(qū)間。

tabletext <- tabletext[,1]
forestplot(tabletext, 
           mean = cbind(HRQoL$Sweden[, "coef"], HRQoL$Denmark[, "coef"]),
           lower = cbind(HRQoL$Sweden[, "lower"], HRQoL$Denmark[, "lower"]),
           upper = cbind(HRQoL$Sweden[, "upper"], HRQoL$Denmark[, "upper"]),
           clip =c(-.1, 0.075),
           col=fpColors(box=c("blue", "darkred")),
           xlab="EQ-5D index")
image.png

估算指標(biāo)

用戶可以在多個(gè)不同的評(píng)估指標(biāo)之間進(jìn)行選擇苇本。使用上面的示例美莫,我們可以將丹麥語(yǔ)結(jié)果設(shè)置為圓圈。

forestplot(tabletext, 
            fn.ci_norm = c(fpDrawNormalCI, fpDrawCircleCI),
            boxsize = .25, # We set the box size to better visualize the type
            line.margin = .1, # We need to add this to avoid crowding
            mean = cbind(HRQoL$Sweden[, "coef"], HRQoL$Denmark[, "coef"]),
            lower = cbind(HRQoL$Sweden[, "lower"], HRQoL$Denmark[, "lower"]),
            upper = cbind(HRQoL$Sweden[, "upper"], HRQoL$Denmark[, "upper"]),
            clip =c(-.125, 0.075),
            col=fpColors(box=c("blue", "darkred")),
            xlab="EQ-5D index")
image.png

置信區(qū)間/框繪制功能是完全可定制的蹬跃。您可以編寫(xiě)自己的函數(shù)來(lái)接受參數(shù):lower_limit, estimate, upper_limit, size, y.offset, clr.line, clr.marker和 lwd匙瘪。

選擇線型

用戶還可以通過(guò)指定為特定于元素的*lty.ci*命令在所有可用行類(lèi)型之間進(jìn)行選擇。

forestplot(tabletext, 
            fn.ci_norm = c(fpDrawNormalCI, fpDrawCircleCI),
            boxsize = .25, # We set the box size to better visualize the type
            line.margin = .1, # We need to add this to avoid crowding
            mean = cbind(HRQoL$Sweden[, "coef"], HRQoL$Denmark[, "coef"]),
            lower = cbind(HRQoL$Sweden[, "lower"], HRQoL$Denmark[, "lower"]),
            upper = cbind(HRQoL$Sweden[, "upper"], HRQoL$Denmark[, "upper"]),
            clip =c(-.125, 0.075),
            lty.ci = c(1, 2),
            col=fpColors(box=c("blue", "darkred")),
            xlab="EQ-5D index")
image.png

Legends

Adding a basic legend is done through the legend argument:

forestplot(tabletext, 
           legend = c("Sweden", "Denmark"),
           fn.ci_norm = c(fpDrawNormalCI, fpDrawCircleCI),
           boxsize = .25, # We set the box size to better visualize the type
           line.margin = .1, # We need to add this to avoid crowding
           mean = cbind(HRQoL$Sweden[, "coef"], HRQoL$Denmark[, "coef"]),
           lower = cbind(HRQoL$Sweden[, "lower"], HRQoL$Denmark[, "lower"]),
           upper = cbind(HRQoL$Sweden[, "upper"], HRQoL$Denmark[, "upper"]),
           clip =c(-.125, 0.075),
           col=fpColors(box=c("blue", "darkred")),
           xlab="EQ-5D index")
image.png

This can be further customized by setting the legend_args argument using the fpLegend function:

forestplot(tabletext, 
           legend_args = fpLegend(pos = list(x=.85, y=0.25), 
                                  gp=gpar(col="#CCCCCC", fill="#F9F9F9")),
           legend = c("Sweden", "Denmark"),
           fn.ci_norm = c(fpDrawNormalCI, fpDrawCircleCI),
           boxsize = .25, # We set the box size to better visualize the type
           line.margin = .1, # We need to add this to avoid crowding
           mean = cbind(HRQoL$Sweden[, "coef"], HRQoL$Denmark[, "coef"]),
           lower = cbind(HRQoL$Sweden[, "lower"], HRQoL$Denmark[, "lower"]),
           upper = cbind(HRQoL$Sweden[, "upper"], HRQoL$Denmark[, "upper"]),
           clip =c(-.125, 0.075),
           col=fpColors(box=c("blue", "darkred")),
           xlab="EQ-5D index")
image.png

刻度和網(wǎng)格

如果默認(rèn)記號(hào)與所需值不匹配,則只需使用xticks參數(shù)即可輕松更改這些記號(hào):

forestplot(tabletext, 
           legend = c("Sweden", "Denmark"),
           fn.ci_norm = c(fpDrawNormalCI, fpDrawCircleCI),
           boxsize = .25, # We set the box size to better visualize the type
           line.margin = .1, # We need to add this to avoid crowding
           mean = cbind(HRQoL$Sweden[, "coef"], HRQoL$Denmark[, "coef"]),
           lower = cbind(HRQoL$Sweden[, "lower"], HRQoL$Denmark[, "lower"]),
           upper = cbind(HRQoL$Sweden[, "upper"], HRQoL$Denmark[, "upper"]),
           clip =c(-.125, 0.075),
           col=fpColors(box=c("blue", "darkred")),
           xticks = c(-.1, -0.05, 0, .05),
           xlab="EQ-5D index")
image.png

通過(guò)向刻度添加labels屬性丹喻,用戶可以進(jìn)一步定制刻度薄货,下面是每隔一個(gè)刻度定制刻度文本的示例:

xticks <- seq(from = -.1, to = .05, by = 0.025)
xtlab <- rep(c(TRUE, FALSE), length.out = length(xticks))
attr(xticks, "labels") <- xtlab
forestplot(tabletext, 
           legend = c("Sweden", "Denmark"),
           fn.ci_norm = c(fpDrawNormalCI, fpDrawCircleCI),
           boxsize = .25, # We set the box size to better visualize the type
           line.margin = .1, # We need to add this to avoid crowding
           mean = cbind(HRQoL$Sweden[, "coef"], HRQoL$Denmark[, "coef"]),
           lower = cbind(HRQoL$Sweden[, "lower"], HRQoL$Denmark[, "lower"]),
           upper = cbind(HRQoL$Sweden[, "upper"], HRQoL$Denmark[, "upper"]),
           clip =c(-.125, 0.075),
           col=fpColors(box=c("blue", "darkred")),
           xticks = xticks,
           xlab="EQ-5D index")
image.png

有時(shí),當(dāng)用戶繪制了一個(gè)非常高的圖形碍论,又想要添加輔助線谅猾,以便更容易地看到刻度線。這在非劣勢(shì)或等價(jià)性研究中很有用鳍悠。則可以通過(guò)更改grid參數(shù)來(lái)實(shí)現(xiàn):

forestplot(tabletext, 
           legend = c("Sweden", "Denmark"),
           fn.ci_norm = c(fpDrawNormalCI, fpDrawCircleCI),
           boxsize = .25, # We set the box size to better visualize the type
           line.margin = .1, # We need to add this to avoid crowding
           mean = cbind(HRQoL$Sweden[, "coef"], HRQoL$Denmark[, "coef"]),
           lower = cbind(HRQoL$Sweden[, "lower"], HRQoL$Denmark[, "lower"]),
           upper = cbind(HRQoL$Sweden[, "upper"], HRQoL$Denmark[, "upper"]),
           clip =c(-.125, 0.075),
           col=fpColors(box=c("blue", "darkred")),
           grid = TRUE,
           xticks = c(-.1, -0.05, 0, .05),
           xlab="EQ-5D index")
image.png

通過(guò)將gpar對(duì)象添加到矢量中赊瞬,您可以輕松地自定義要使用的網(wǎng)格線以及網(wǎng)格線的類(lèi)型:

forestplot(tabletext, 
           legend = c("Sweden", "Denmark"),
           fn.ci_norm = c(fpDrawNormalCI, fpDrawCircleCI),
           boxsize = .25, # We set the box size to better visualize the type
           line.margin = .1, # We need to add this to avoid crowding
           mean = cbind(HRQoL$Sweden[, "coef"], HRQoL$Denmark[, "coef"]),
           lower = cbind(HRQoL$Sweden[, "lower"], HRQoL$Denmark[, "lower"]),
           upper = cbind(HRQoL$Sweden[, "upper"], HRQoL$Denmark[, "upper"]),
           clip =c(-.125, 0.075),
           col=fpColors(box=c("blue", "darkred")),
           grid = structure(c(-.1, -.05, .05), 
                            gp = gpar(lty = 2, col = "#CCCCFF")), 
           xlab="EQ-5D index")
image.png

如果您不熟悉結(jié)構(gòu)調(diào)用,則相當(dāng)于生成一個(gè)向量贼涩,然后設(shè)置一個(gè)屬性巧涧,例如:

grid_arg <- c(-.1, -.05, .05) 
attr(grid_arg, "gp") <- gpar(lty = 2, col = "#CCCCFF")
identical(grid_arg, 
          structure(c(-.1, -.05, .05), 
                    gp = gpar(lty = 2, col = "#CCCCFF")))
# Returns TRUE

好了,就這些. 作者希望這個(gè) forestplot 包對(duì)你有用.
參考:https://github.com/gforge/forestplot

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末遥倦,一起剝皮案震驚了整個(gè)濱河市谤绳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌袒哥,老刑警劉巖缩筛,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異堡称,居然都是意外死亡瞎抛,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)却紧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)桐臊,“玉大人,你說(shuō)我怎么就攤上這事晓殊《闲祝” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵巫俺,是天一觀的道長(zhǎng)认烁。 經(jīng)常有香客問(wèn)我,道長(zhǎng)介汹,這世上最難降的妖魔是什么却嗡? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮嘹承,結(jié)果婚禮上窗价,老公的妹妹穿的比我還像新娘。我一直安慰自己赶撰,他們只是感情好舌镶,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著豪娜,像睡著了一般餐胀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瘤载,一...
    開(kāi)封第一講書(shū)人閱讀 51,488評(píng)論 1 302
  • 那天否灾,我揣著相機(jī)與錄音,去河邊找鬼鸣奔。 笑死墨技,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的挎狸。 我是一名探鬼主播扣汪,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼锨匆!你這毒婦竟也來(lái)了崭别?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤恐锣,失蹤者是張志新(化名)和其女友劉穎茅主,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體土榴,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡诀姚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了玷禽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赫段。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖矢赁,靈堂內(nèi)的尸體忽然破棺而出瑞佩,到底是詐尸還是另有隱情,我是刑警寧澤坯台,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布炬丸,位于F島的核電站,受9級(jí)特大地震影響蜒蕾,放射性物質(zhì)發(fā)生泄漏稠炬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一咪啡、第九天 我趴在偏房一處隱蔽的房頂上張望首启。 院中可真熱鬧,春花似錦撤摸、人聲如沸毅桃。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)钥飞。三九已至莺掠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間读宙,已是汗流浹背彻秆。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留结闸,地道東北人唇兑。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像桦锄,于是被迫代替她去往敵國(guó)和親扎附。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 資料來(lái)源:https://github.com/BrambleXu/pydata-notebook 信息可視化(也...
    林清貓耳閱讀 1,557評(píng)論 0 3
  • 圖表控件庫(kù) MPAndroidChart 的使用 使用方法 項(xiàng)目源碼地址结耀,包含了很多類(lèi)型的圖標(biāo) https://g...
    jinchuang閱讀 819評(píng)論 0 0
  • 本章節(jié)以及后續(xù)章節(jié)的源碼帕棉,當(dāng)然也可以從我的github下載,在源碼中我自己加了一些中文注釋饼记。 這兩天沒(méi)更新香伴,好好反...
    owolf閱讀 1,539評(píng)論 0 4
  • 上一篇我們學(xué)習(xí)過(guò)了matplotlib庫(kù),現(xiàn)在我們學(xué)習(xí)一下seaborn庫(kù)具则,seaborn是基于matplotli...
    風(fēng)之舟閱讀 3,766評(píng)論 0 27
  • 期末考試馬上就要到了即纲,體育課停課了,所有的訓(xùn)練也停下了博肋。連昔沒(méi)有很好的借口見(jiàn)吳夢(mèng)了低斋,吳夢(mèng)也不想打擾連昔,希望她好好...
    班杰瑞閱讀 278評(píng)論 0 0