首页 > 其他分享 >R数据分析:冲击流图与热图的做法以及多图布局

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

时间:2022-12-14 21:46:23浏览次数:72  
标签:区块 可以 多图 图例 geom 文章 热图 流图

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

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包进行多图布局,希望对大家有帮助。感谢大家耐心看完,自己的文章都写的很细,重要代码都在原文中,希望大家都可以自己做一做,请转发本文到朋友圈后私信回复“数据链接”获取所有数据和本人收集的学习资料。如果对您有用请先记得收藏,再点赞分享。

 

标签:区块,可以,多图,图例,geom,文章,热图,流图
From: https://www.cnblogs.com/Codewar/p/16983663.html

相关文章

  • 在vue3.0+中使用tinymce及实现多图上传,文件上传,公式编辑等功能
    vue2版本移步至https://www.cnblogs.com/huihuihero/p/13877589.htmlvue3版本中配置tinymce,相较于vue2版本区别不大,主要注意tinymce版本号。其他注意项下面提及版本号......
  • 多图片生成PDF(二)HTML生成PDF
    HTML生成PDF一、html生成pdf需要引入jar包在pom.xml中引入如下jar包<dependency><groupId>com.itextpdf</groupId><artifactId>html2pdf</artifactId><v......
  • 多图片生成PDF(一)多图片生成HTML
    多图片生成HTML一、准备前提1、准备一个html模板<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metaname="viewport"content="width=d......
  • 帝国CMS:批量上传Excel数据时候,无法将多图字段写入数据库?
    使用Excel批量上传插件的时候,根据插件规则,已经设置好了Excel表中的多图字段分段规则。但是上传后,发现无法在多图位置展现多图。查询插件的设置时发现都是正确的,前往多图功......
  • 如何画数据流图
    快速阅读如何画数据流图,以及如何在visio2013中画数据流图。数据流图中各个园元分别代表什么含义。什么是数据流图DFD=dataflowdiagram在系统设计阶段。是对将来要构建的系......
  • 时速超600公里的磁悬浮列车是怎么运作的?多图解析
    今年7月20日我国自主要发的高速磁悬浮列车在青岛下线,时速达620千米,创世界纪录。这是世界上第一套时速超600公里的高速列车,成为目前地面上速度最快的交通工具。那么磁悬浮列......
  • 正则爬取糗事百科热图
    正则爬取糗事百科热图:第一步:找到网址我们分析Header,是Get请求下面开始撸代码:importrequestsimportjson,timeimportre,os上面先导入库没有的pipintstall安装库,可以通过......
  • 1个 GIS 中的热图 创建技巧
      有人说:一个人从1岁活到80岁很平凡,但如果从80岁倒着活,那么一半以上的人都可能不凡。生活没有捷径,我们踩过的坑都成为了生活的经验,这些经验越早知道,你要走的弯路就会越少......
  • eclipse下载,安装,JDk环境配置教程(多图)
    下载链接:http://www.eclipse.org/downloads/点击DownloadPackages;根据自己的系统选择32位还是64位的,点击相应链接下载(可能会弹出一个需要你付费的页面,......
  • 热图怎么提取图中聚类后的行基因名称
    我们在画热图的时候,行基因的顺序怎么轻松拿到呢?如果基因数量少可以直接看出来,但是如果有几百个,还用眼睛看,眼睛估计会看瞎,有没有更方便的方法获取?在谷歌上寻求方法:https......