热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

欢迎关注”生信修炼手册”!在之前的文章中,我们介绍了列线图的含义和构建方法,本文重点介绍下绘制列线图的代码,经典的列线图如下所示当我们构建

欢迎关注”生信修炼手册”!

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

58c9047a381b873974adffc0e6ffb189.png

当我们构建好一个预后模型之后,可以通过列线图来可视化其公式,最常用的绘图方法是通过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 235albumin 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=&#39;lognormal&#39;)
> nom <- nomogram(f)
> plot(nom)

效果图如下

0c9c63771ab7df4467152d864ef329c2.png

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

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

效果图如下

56c5a8c8aa892b4d8fc725456cb97702.png

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

> f <- psm(Surv(time,status) ~ age + sex, data = pbc, dist=&#39;lognormal&#39;)
> # 计算中位生存时间
> 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)

效果图如下

56e84724dfdd512083efcfecb2344ecb.png

由于该数据中的生存时间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)

效果图如下

765d29b3b7918d4f41a3f6baf9802b89.png

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

·end·

—如果喜欢,快分享给你的朋友们吧—

原创不易,欢迎收藏,点赞,转发!生信知识浩瀚如海,在生信学习的道路上,让我们一起并肩作战!

本公众号深耕耘生信领域多年,具有丰富的数据分析经验,致力于提供真正有价值的数据分析服务,擅长个性化分析,欢迎有需要的老师和同学前来咨询。

  更多精彩

  • KEGG数据库,除了pathway你还知道哪些

  • 全网最完整的circos中文教程

  • DNA甲基化数据分析专题

  • 突变检测数据分析专题

  • mRNA数据分析专题

  • lncRNA数据分析专题

  • circRNA数据分析专题

  • miRNA数据分析专题

  • 单细胞转录组数据分析专题

  • chip_seq数据分析专题

  • Hi-C数据分析专题

  • HLA数据分析专题

  • TCGA肿瘤数据分析专题

  • 基因组组装数据分析专题

  • CNV数据分析专题

  • GWAS数据分析专题

  • 机器学习专题

  • 2018年推文合集

  • 2019年推文合集

  • 2020推文合集

  写在最后

转发本文至朋友圈,后台私信截图即可加入生信交流群,和小伙伴一起学习交流。

扫描下方二维码,关注我们,解锁更多精彩内容!

f208c7053b4342f4ef9076e0b54392b1.png

一个只分享干货的

生信公众



推荐阅读
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 建立分类感知器二元模型对样本数据进行分类
    本文介绍了建立分类感知器二元模型对样本数据进行分类的方法。通过建立线性模型,使用最小二乘、Logistic回归等方法进行建模,考虑到可能性的大小等因素。通过极大似然估计求得分类器的参数,使用牛顿-拉菲森迭代方法求解方程组。同时介绍了梯度上升算法和牛顿迭代的收敛速度比较。最后给出了公式法和logistic regression的实现示例。 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • 本文介绍了贝叶斯垃圾邮件分类的机器学习代码,代码来源于https://www.cnblogs.com/huangyc/p/10327209.html,并对代码进行了简介。朴素贝叶斯分类器训练函数包括求p(Ci)和基于词汇表的p(w|Ci)。 ... [详细]
  • 前言:拿到一个案例,去分析:它该是做分类还是做回归,哪部分该做分类,哪部分该做回归,哪部分该做优化,它们的目标值分别是什么。再挑影响因素,哪些和分类有关的影响因素,哪些和回归有关的 ... [详细]
author-avatar
Liu_y_菁
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有