今天看了一篇新冠肺炎相关后遗症的文章,主要探讨新冠住院病人一年后的后遗症情况,文章的统计分析很简单,不过结果展示中的两个图我觉的大家可以学一学,原文如下

Rivera-Izquierdo, M., Láinez-Ramos-Bossini, A.J., de Alba, I.GF. et al. Long COVID 12 months after discharge: persistent symptoms in patients hospitalised due to COVID-19 and patients hospitalised due to other causes—a multicentre cohort study. BMC Med 20, 92 (2022). https://doi.org/10.1186/s12916-022-02292-6

感兴趣的童鞋可以去读一读原文,我们今天依然是聚焦文章呈现形式的复现。

首先就是这个冲击流图

可以看到在这个图中作者将数据以性别进行了分层,每个性别中5个后遗症的发病数量用线条的宽度来表示,这样就可以将每个后遗症中各个性别人数占比情况很直观的展现出来。我们先来看这个图的做法。

实例操练

我现在有数据如下:

比如我现在想做一个和文章中一样的图,我就可以写出代码如下:

ggplot(data = data_plot,
aes(axis1 = x1, axis2 = x2, y = y)) +
geom_alluvium(aes(fill = x1),
curve_type = "cubic") +
geom_stratum() +
geom_text(stat = "stratum",
aes(label = after_stat(stratum))) +
scale_x_discrete(limits = c("x1", "x2"),
expand = c(0.15, 0.05)) +
theme_void()

运行代码即可出图如下:

可以看到这个图本身是应该带一个图例的,文章中没有带,我们也可以将其拿掉,只需要在theme中设置legend.position='none'或者加上show.legend = F就可以,去掉图例再调整下下区块宽度之后整个图就和文章中的大差不差了。

还有几个关于冲击图的调整方法给大家作一介绍。

线条形状

就是冲击图中的连线的形状是可以有多种选择的,设定的参数是curve_type,可以设定为"linear", "cubic", "quintic", "sine", "arctangent", and "sigmoid". "xspline",不同的设定可以体现为不同的线条形状,下图则是不同参数对应的效果:

这些线条形状其实是没有任何意义的,只是外观上的不同,大家应用时只关心它的宽度就好。

Strata(区块)宽度

我们看整个冲击图的时候要明白,其底层是冲击线条,对于我们的图和文章中的图来讲,左右两边的区块叫做Strata,我将其翻译为区块,大家知道我想表达的意思就行。

对于这个区块的宽度我们也是可以进行设定的,比如我们如果区块比较多,冲击图整体比较长的时候我们肯定倾向把区块搞的小一点的。这个时候我们同步调整geom_stratum和geom_alluvium中的width参数即可,比如我都调到0.1效果如下:

可以明显看出来图两边的区块变得就很窄了。

颜色

颜色整体也分为两个部分,一个是冲击图线条的颜色,一个是区块的颜色,可以分开设置,如果要单纯设置线条的颜色直接在geom_alluvium中操作就行,设置区块的颜色在geom_stratum中操作就行,下图就是不同期刊的调色板出来的不同颜色:

只要多试试,肯定可以调到自己满意的颜色的。

冲击图的就给大家写道这儿,接下来看原文中的第二个图,也就是热图的做法

文献原文中作者将每个不同器官不同年龄的后遗症占比数据进行了热图可视化,效果如下:

通过热图作者将数字大小映射到颜色上,可以很方便的进行对比。

这个热图只有一个图例映射,做起来很简单,大家只需要用pheatmap函数喂给原始数据就可以出图,很简单:

我们来看一个更加复杂的热图的做法,来自另外一篇文章,图长这样:

这个热图依然是起到一个描述统计的作用,特点是既有连续变量又有分类变量,所以图例的映射关系就有多个,整体比前面的热图要复杂。前面文章中的热图所有变量都是连续变量,做起来就很容易,数值映射就一个图例就好,在这幅图中可以看到图例很多。

像这样的热图我们可以用多个热图拼接而成,依然是给大家写一个例子:

我们使用的数据是自带的mtcars数据集,长这样:

我期望对里面的每个变量用热图进行统计描述,假定其中有两个变量am和vs都是分类变量。首先我需要将数据切成2份,一份是全含连续变量的子集,另一份是全含分类变量的子集,对两份子集我们分别做热图map1和map2,映射好图例如下,这是所有连续变量的热图:

这是所有分类变量的热图:

做好之后我们用%v%符号将两个图进行合并形成一个合并后的对象,然后将合并后的对象喂给draw函数即可出图,代码如下:

map_list=map1%v%map2
draw(map_list,ht_gap = unit(c(0, 0), "mm"),heatmap_legend_side = "bottom"
)

运行上面代码,看效果:

此时整个mtcars数据集的描述统计热图就出来了,和发表的文献中的图进行比对,基本算是原滋原味。

多图布局的操作方法

就是我们经常会遇见的需求就是将几幅图组合在一起形成一张大图,像下面这种文章的样子:

一般人的操作,将R语言中做好的图片导出到本地,然后在PPT中处理布局,再导出PPT,完全也行的。

不过既然都打算使用R了,既然使用R也都关注我了,那么就给大家分享一些更方便实用的多图布局的操作,比如我现在在R中已经画好了4副图,假设为p1,p2,p3,p4,我现在像2*2进行布局,只需要写出如下代码:

plot_grid(p1, p2, p3, p4)

运行后,4张图就布局为我们想要的样子了:

写论文的时候通常会需要对子图打上标签比如abcd,方便写图的注释,此时我们只需要设定labels参数就可以,比如我写出代码如下:

plot_grid(p1, p2, p3, p4,labels = "AUTO")
plot_grid(p1, p2, p3, p4,labels = c('A', 'B', 'C', 'D'))

出来的效果都是一样的,子图都带上标签:

还有包括编号的顺序,子图的宽度,子图的高度,标签的位置等等都是可以设置的,详见参数说明:

另外ggpubr包中的ggarrange也可以很方便的帮助我们进行多图布局,使用方法也是差不多的。

小结

今天给大家介绍了冲击流图和热图的做法,顺便写了cowplot包进行多图布局,希望对大家有帮助。感谢大家耐心看完,自己的文章都写的很细,重要代码都在原文中,希望大家都可以自己做一做,请转发本文到朋友圈后私信回复“数据链接”获取所有数据和本人收集的学习资料。如果对您有用请先记得收藏,再点赞分享。

R数据分析:冲击流图与热图的做法以及多图布局的更多相关文章

  1. 用R包中heatmap画热图

    一:导入R包及需要画热图的数据 library(pheatmap) data<- read.table("F:/R练习/R测试数据/heatmapdata.txt",head ...

  2. R数据分析:潜类别轨迹模型LCTM的做法,实例解析

    最近看了好多潜类别轨迹latent class trajectory models的文章,发现这个方法和我之前常用的横断面数据的潜类别和潜剖面分析完全不是一个东西,做纵向轨迹的正宗流派还是这个方法,当 ...

  3. R数据分析:二分类因变量的混合效应,多水平logistics模型介绍

    今天给大家写广义混合效应模型Generalised Linear Random Intercept Model的第一部分 ,混合效应logistics回归模型,这个和线性混合效应模型一样也有好几个叫法 ...

  4. R语言学习 - 热图简化

    绘制热图除了使用ggplot2,还可以有其它的包或函数,比如pheatmap::pheatmap (pheatmap包中的pheatmap函数).gplots::heatmap.2等.   相比于gg ...

  5. R语言学习 - 热图绘制heatmap

    生成测试数据 绘图首先需要数据.通过生成一堆的向量,转换为矩阵,得到想要的数据. data <- c(1:6, 6:1, 6:1, 1:6, (6:1)/10, (1:6)/10, (1:6)/ ...

  6. R绘图(2): 离散/分类变量如何画热图/方块图

    相信很多人都看到过上面这种方块图,有点像"华夫饼图"的升级版,也有点像"热图"的离散版.我在一些临床多组学的文章里面看到过好几次这种图,用它来展示病人的临床信息 ...

  7. R语言学习 - 热图美化

    实际应用中,异常值的出现会毁掉一张热图.这通常不是我们想要的.为了更好的可视化效果,需要对数据做些预处理,主要有对数转换,Z-score转换,抹去异常值,非线性颜色等方式. 对数转换 为了方便描述,假 ...

  8. [R] 如何绘制各样本的pathway丰度热图?

    前言 一般而言,我们做完pathway富集分析,就做下气泡图或bar图来进行展示,但它们实际上只考虑了富集因子和Pvalue.如果我们不关注这两个因素,而是在乎样本本身的pathway丰度呢? 对于K ...

  9. R语言与医学统计图形-【17】ggplot2几何对象之热图

    ggplot2绘图系统--heatmap.geom_rect 这里不介绍更常见的pheatmap包. 1.heatmap函数 基础包. data=as.matrix(mtcars) #接受矩阵 hea ...

  10. 精心整理(含图版)|你要的全拿走!(R数据分析,可视化,生信实战)

    本文首发于“生信补给站”公众号,https://mp.weixin.qq.com/s/ZEjaxDifNATeV8fO4krOIQ更多关于R语言,ggplot2绘图,生信分析的内容,敬请关注小号. 为 ...

随机推荐

  1. C++ 学习路线图

    基础阶段 学习重点: 基本语法:掌握 C++ 的变量.数据类型(如整型.浮点型.字符型等).运算符.控制流语句(条件判断if-else.循环for.while.do-while等).这是编写 C++ ...

  2. 2.3.1 ChatGLM3简介与安装

    安装:pip install modelscope pip install torch==2.0.1 torchaudio torchvision -i https://pypi.tuna.tsing ...

  3. 第22天:安全开发-PHP应用&留言板功能&超全局变量&数据库操作&第三方插件引用

    #数据库操作-mysqli函数&增删改查 PHP函数:连接,选择,执行,结果,关闭等 参考:https://www.runoob.com/php/php-ref-mysqli.html 常用: ...

  4. 使用VNC连接ubuntu16.4错误Authentication Failure问题

    解决办法:是因为vnc用一套自己的密码系统,不要去输入ssh登录时的密码,所以只需要进入远程服务器中,设置一哈vnc的密码即可! 在终端输入命令:vncpasswd 到此可以试试远程

  5. Flask源码分析(目录)

    目录 推荐阅读 it程序猿面试必备装逼技能 Flask 源码分析 1.flask 源码解析:简介 2.flask 源码解析:应用启动流程 3.flask 源码解析:路由 4.flask 源码解析:上下 ...

  6. 云原生爱好者周刊:在浏览器中运行 Linux 系统 | 2022-10-10

    Confluent 官网已经放出了<Kafka 权威指南第二版:大规模实时数据和流处理>,相比于第一版新增了以下内容: Kafka 管理客户端概述: API 更新到最新的 Apache K ...

  7. PG 的 MergeJoin 就是鸡肋

    好久没写博客,平时工作非常忙,而且现在对接的应用基本都是微服务架构. 微服务这种架构平时也很难遇到复杂SQL,架构层面也限制了不允许有复杂SQL,平时处理的都是简单一批的点查SQL. 基本上优化的内容 ...

  8. web端ant-design-vue-Anchor锚点组件使用小节(1)

    web端ant-design-vue-Anchor锚点组件使用小节.项目开发中如果要实现前端页面平滑滚动到指定的位置,Anchor组件是一个好的选择,灵活且平滑,能满足常见的项目需求.最近开发中幸运的 ...

  9. AI五子棋_08 五子棋落子规则对应的价值

    AI五子棋 第八步 恭喜你到达第八步! 利用前一步得到的棋型分析结果,考察每一个可能落子的位置,给每一个可能的位置打分,将棋子落在分数最高的位置上.根据经验,我们可以总结出下面的落子规则: 1. 致胜 ...

  10. HTML5+CSS3+JavaScript网页实战

    1. HTML5基础 HTML5,作为构建和呈现网页内容的标准标记语言,带来了许多革命性的变化.它不仅提供了更加语义化的标签,使得网页内容更具可读性和可访问性,还增加了对多媒体的原生支持,无需依赖第三 ...