专栏首页生信修炼手册手把手教你绘制最基础的列线图

手把手教你绘制最基础的列线图

在之前的文章中,我们介绍了列线图的含义和构建方法,本文重点介绍下绘制列线图的代码,经典的列线图如下所示

当我们构建好一个预后模型之后,可以通过列线图来可视化其公式,最常用的绘图方法是通过rms这个R包,以pbc这个生存分析的数据为例,展示下其基本用法

> library(rms)
> pbc <- pbc[pbc$status %in% c(0, 1), ]
> head(pbc)
   id time status trt      age sex ascites hepato spiders edema bili chol
2   2 4500      0   1 56.44627   f       0      1       1   0.0  1.1  302
5   5 1504      1   2 38.10541   f       0      1       1   0.0  3.4  279
7   7 1832      0   2 55.53457   f       0      1       0   0.0  1.0  322
13 13 3577      0   2 45.68925   f       0      0       0   0.0  0.7  281
16 16 3672      0   2 40.44353   f       0      0       0   0.0  0.7  204
19 19 4232      0   1 49.56057   f       0      1       0   0.5  0.7  235
   albumin copper alk.phos    ast trig platelet protime stage
2     4.14     54   7394.8 113.52   88      221    10.6     3
5     3.53    143    671.0 113.15   72      136    10.9     3
7     4.09     52    824.0  60.45  213      204     9.7     3
13    3.85     40   1181.0  88.35  130      244    10.6     3
16    3.66     28    685.0  72.85   58      198    10.8     3
19    3.56     39   1881.0  93.00  123      209    11.0     3
> dd <- datadist(pbc)
> options(datadist = "dd")
# 生存模型
> f <- psm(Surv(time,status) ~ age + sex, data =  pbc, dist='lognormal')
> nom <- nomogram(f)
> plot(nom)

效果图如下

和文献中的列线图相比,rms的默认输出结果中多出了Linear Predictor这个轴,如果想要去掉这个轴,可以通过如下方法

> f <- psm(Surv(time,status) ~ age + sex, data =  pbc, dist='lognormal')
> nom <- nomogram(f, lp = F)
> plot(nom)

效果图如下

可以看到,LInear Predictor这个轴就不显示了。对于生存模型,我们希望通过该模型预测患者的生存时间和生存概率,基础的列线图显然并没有这样的信息,为此,我们需要自己写函数来添加我们想要的轴,用法如下

> f <- psm(Surv(time,status) ~ age + sex, data =  pbc, dist='lognormal')
> # 计算中位生存时间
> med  <- Quantile(f)
> # 构建生存概率
> surv <- Survival(f)
> nom <- nomogram(f,
+     fun = list(function(x) med(lp = x, q = 0.5),
+                function(x) surv(365,     x),
+                function(x) surv(365 * 3, x),
+                function(x) surv(365 * 5, x)),
+     funlabel = c("Median Survival Time",
+                   "1-year Survival Probability",
+                   "3-year Survival Probability",
+                   "5-year Survival Probability"),
+     lp = F)
> plot(nom)

效果图如下

由于该数据中的生存时间time是以天为单位就算的,因此在计算年的时候进行了转换。虽然加上了我们想要的信息,但是发现坐标轴的标签重叠了,此时有几种方法可以解决这个问题

1. 增加画布的宽度,将宽度加大之后绘图区域变宽,标签间的距离变大,重叠情况会减少

2. 设置标签的文字大小,在plot函数中通过cex.axis参数设置大小

3. 重新设置坐标轴的间隔,通过fun.at参数,用法如下

> nom <- nomogram(f,
+     fun = list(function(x) med(lp   =    x),
+                function(x) surv(365,     x),
+                function(x) surv(365 * 3, x),
+                function(x) surv(365 * 5, x)),
+     funlabel = c("Median Survival Time",
+                   "1-year Survival Probability",
+                   "3-year Survival Probability",
+                   "5-year Survival Probability"),
+     fun.at = list(c(10000, 20000, 30000, 40000, 60000, 90000),
+                   c(0.96, 0.97, 0.98, 0.99, 0.995),
+                   c(0.90, 0.92, 0.94, 0.96, 0.98),
+                   c(0.6, 0.8, 0.9, 0.95)),              
+     lp = F)
> plot(nom)

效果图如下

综合使用以上3种方案,就可以得到一个文字标签不会重叠的列线图啦。

·end·

文章分享自微信公众号:
生信修炼手册

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

作者:lzyg
原始发表时间:2022-06-08
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • 手把手掌握临床研究的必备绘图技能:列线图

    列线图(Alignment Diagram),又称诺莫图(Nomogram图),它是建立在多因素回归分析的基础上,这里的回归既包括Logistic回归也包括co...

    百味科研芝士
  • 手把手教你使用Python语言的Pygame绘制动图

    在推上看到一张有意思的图片,黑点在多个交叉的圆上做圆周运动,看上去会有波浪的效果。我想这个Python的Pygame就可以实现啊。马上动手,下面是程序运行的效果...

    fanzhh
  • 手把手教你读懂源码,View的绘制流程详细剖析

    上一篇文章我们分析了View的加载流程,今天我们继续来深入学习View的绘制流程,接着上次的View绘制开始,同样使用的是Android 7.1源码。 ...

    分享达人秀
  • Android利用MPAndroidChart绘制曲线图表的基础教程

    最近看了一下 Android 上的图表控件,去年做过一款应用也已上架了,也用到了图表控件,但是只是按照官方 demo 集成了,并没有过多的研究。

    砸漏
  • 手把手教你用ggsci包绘制不同杂志风格的图形

    各位科研芝士的小伙伴,今天给大家分享可视化专题学术期刊配色的绘制,我们的目标是学会Nature Publishing Group,American Associ...

    百味科研芝士
  • 手把手教你手撸通讯协议(二)-网络的基础

    网络接口层:定义数据帧(对电信号0/1进行的特定分组)、确认主机的物理地址(MAC地址),通过传输介质在网络上传输数据帧。网络接口有不同的实现方式,比如可以通过...

    剑指工控
  • 手把手教你用plotly绘制excel中常见的16种图表(下)

    上一期咱们介绍《手把手教你用plotly绘制excel中常见的16种图表(上)》演示了8种常见图表,今天我们继续演示另外8种常见图表的绘制。

    可以叫我才哥
  • 手把手教你用plotly绘制excel中常见的16种图表(上)

    最近不是在学习plotly嘛,为了方便理解,我们这里取excel绘图中常见的16种图表为例,分两期演示这些基础图表怎么用plotly进行绘制!

    可以叫我才哥
  • 手把手教你安装win10+Ubuntu16.04的双系统(全网最详细)

    本系列为小白入门整个AI项目教程,主要涉及双系统的搭建,linux的使用,安装caffe-gpu版本,利用caffe实现目标检测,并移植模型到android移动...

    小小詹同学
  • R语言系列第六期:③R语言高级绘图(上)

    这一节将介绍更多的R图形资源。首先是定制R图形的一些常用方法,主要涉及数据和模型的图形绘制。然后是如何自定义其他类型的图形或点线等元素。

    百味科研芝士
  • 超震撼动态排序图:代码不到40行,手把手教你学会!

    具体来说,这种图可以叫:Bar Chart Race,有什么国家GDP的、某某沉浮史等等,为了符合公众号的身份属性,我们为大家制作了这个较为简单的可视化视频:2...

    Python数据科学
  • 超火动态排序图:代码不到40行,手把手教你!

    具体来说,这种图可以叫:Bar Chart Race,有什么国家GDP的、某某沉浮史等等,为了符合公众号的身份属性,我们为大家制作了这个较为简单的可视化视频:2...

    量化投资与机器学习微信公众号
  • PS,AI,Sketch工具教程集结

    这里是一些有关工具的教程,还有几篇自学前的梳理,大多从优设网挑出来,自己也跟着练过一部分。

    宇相
  • 手把手教你用Python来模拟绘制高中物理中平抛运动过程中的实线抛物线(附源码)

    也就是说需要实线进行作图。下图是粉丝的提问题目,可以看看需求,其实就是需要用Python进行实现。

    Python进阶者
  • 对比学习,用Excel和Python绘制「棒棒糖图」

    今天给大家带来一篇比较有意思的可视化图——?棒棒糖图?详细绘图教程。对比Excel与Pyhton,手把手教你绘制高大上的?棒棒糖图?。

    数据STUDIO
  • GAN入门教程 | 从0开始,手把手教你学会最火的神经网络

    安妮 编译自 O’Reilly 量子位出品 | 公众号 QbitAI 生成式对抗网络是20年来机器学习领域最酷的想法。 ——Yann LeCun 自从两年前...

    量子位
  • 1分钟教你玩转组合图表

    在日常工作中,有时候单一的图表类型无法满足多维度的数据展示,这时候就要考虑使用组合图表。

    猴子聊数据分析
  • 手把手教你零基础制作酷炫的标签云(词云)

    很多时候,我们需要用炫酷的词云或者标签云来表达文本的重点含义。但是大多数工具都需要一定的编程基础,需要python来处理。而国外虽然有很多词云工具,但是对中文支...

    fieldli
  • 30个有趣的Python实战项目(附源码)

    大家好,今天给大家重磅推荐我的好朋友J哥的公众号——「菜J学Python」,J哥经常在公众号分享有趣的Python实战项目,而且基本都附代码和数据。废话不多说,...

    张俊红

扫码关注腾讯云开发者

领取腾讯云代金券