COVID

发布时间:2025-08-20 17:50

网络关系图是由多个节点构成的一种网络结构图。节点通常是指个人或组织,线条通常代表各种社会关系。

在传染病的应用上,网络关系图用于表示传播链,除了可以描绘社会网络外,还可以描述疾病传播网络,更好地理解疾病在某一地区或某一人群中的流行状况。2020年4月9日至4月16日哈尔滨明确了45例病例的传播关系,《南方都市报》绘制了明确的传播关系图(图1)。

图1 哈尔滨本土病例疫情传播链条(4月9日-16日)

该图关系链条明确,但静态图片展示的篇幅较大,可展示的信息也受到限制。因此我们可以利用R语言将其绘制为交互式传播链。

‍图2 哈尔滨本土病例疫情交互式传播链

‍‍阅读原文,前往 交互网页)

下面,我们将介绍制作交互式传播链的过程:

1.数据准备

01

查看数据

我们根据图1,将关系整理为2个数据表格:节点数据(nodes)和关系数据(edges)。

节点数据(nodes)记录每一个病例的基本信息,数据结构如表1所示。表格有4列数据, id表示病例编号,names表示病例姓名,character表示性别与年龄,classification表示病例分类。在我们平时绘制传播链时,至少需要id和name两列数据。

表1 节点数据库结构(nodes)

关系数据(edges)记录病例之间的传播关系,数据结构如表2所示。有5列数据,from列和to列代表了关系两端的两个case或place的编号id(必须与表1的id相对应)。注意疾病传播关系是一种有向关系,所以arrows变量表示关系,可以选择的共有"to", "from", "middle", "middle;to"四种(图3)。第三列“color”代表连接两端网络的颜色,可以根据自己的需要或喜好设置不同的颜色。edges表中的label会在的箭头附近对两端关系做出标注。我们平时绘制 传播链时,至少需要from和to两列数据。

表2 关系数据库结构 (edges)

图3 四种关系示例

02

软件包

我们用到的是 R 环境下的网络交互可视化工具——visNetwork(https://datastorm-open.github.io/visNetwork/)。visNetwork 基于 Java 可视化工具库vis.js开发,为 R 用户提供了简单易用的界面,功能十分强大。

2.绘制交互式网络关系图

0 1

读入数据

首先我们读取整理的2个数据库。代码如下:

library(visNetwork) #加载安装包

library(openxlsx) #加载excel读取包

#读取数据

nodes <- read.xlsx( "nodes.xlsx",sheet = 1)

edges <- read.xlsx( "edges.xlsx",sheet = 1)

02

定义节点属性

接下来我们要在节点上生成一些属性,这样我们把鼠标挪到某个节点上的时候,就会显示该节点的信息。我们分别对 nodes$title 和 nodes$label 赋值。由于我们这里节点较多,显示会比较密集,我们将节点边界的宽度(nodes$borderwidth)设置为2(默认值为1),这样他们看起来会清楚很多。之后,用visNetwork可视化我们的节点和关系连线。代码和结果如下:

nodes$label <- nodes$name

nodes$title <- nodes$character

nodes$borderWidth<- 2

network<-visNetwork(nodes, edges)

图4 初步绘制的图

需要注意的是,这可不是一张静态图,我们把鼠标悬浮到某个节点上时,相应的属性就出现了。

03

美化交互式社会网络图

上图所有的节点,都是一样的颜色、形状,看起来不清楚,还容易混淆。我们希望依据不同的病例分类,重新绘制节点颜色以及形状,这样看得会更清晰。代码结果如下:

unique(nodes$classification)

###将nodes$group转换成因自行变量##

nodes$group <- factor(nodes$classification,levels = c( "既往感染者", "确诊病例", "无症状感染者"))

###定义颜色##

#节点填充颜色

nodes$color.background <- c( "#D8BFD8", "#FF6A6A", "#F0FFF0")[nodes$group]

#节点边框颜色

nodes$color.border <- c( "#D8BFD8", "#FF6A6A", "#F0FFF0")[nodes$group]

##定义节点边框##

nodes$shape <- c( "star", "box", "ellipse")[nodes$group]

##绘制网络关系图

network<-visNetwork(nodes, edges)

network

图5 经过美化的图

04

分组设置

这里节点较多,所有的情况都显示在一起,如果我们希望聚焦某一个分组该怎么办?

这里介绍其中一个选项。我们首先在visNetwork中,将网络内边的宽度设置为95%,整个网路图的高度设置为1000,再给它起一个标题“病例网络图”。接着利用selectedBy,指定我们让在病例分组“group”上进行分组选择,把它放在 visOptions中。

network <- visNetwork(nodes, edges,width = "95%", height = 1000,main= "病例网络图")%>%

visOptions(selectedBy = "group")

network

图6 添加分组选项的图

最后,我们再细微调节下整个 传播链图:

network <- visNetwork(nodes, edges,width = "95%", height = 1000,

main= "哈尔滨本土病例传播网络图")%>%

visNodes(font = list(color= "black",size= 30))%>%

visEdges(dashes = T,width = 3,length = 250,

font = list(color= "black",size= 30))%>%

visPhysics(solver = "forceAtlas2Based",

forceAtlas2Based = list(gravitationalConstant = - 100))%>%

visOptions(selectedBy = "group")%>%

visGroups(groupname = "既往感染者",color= "#D8BFD8")%>%

visGroups(groupname = "确诊病例",color= "#FF6A6A")%>%

visGroups(groupname = "无症状感染者",color= "#F0FFF0")%>%

visLegend(width = 0.1, position = "right", main = "图例")

network

在VisNodes中,调整字体参数font中的颜色和大小;在VisEdges中,同样调整参数font,并利用参数dashes将线条设置为虚线,线条宽度为3,长度为250;这里的VisPhysics可以调整你拉动节点时的感受,可以是引力也可以是斥力,可大也可小。

VisGroups根据我们数据中group的分类,显示分类对应的名称和颜色作为图例。最后利用VisLegend加入“图例“两字,调整宽度为0.1,放在图的最右方。该图仍有存在继续美化的空间,大家可自行尝试。

最后,我们使用visSave函数,将图片背景设置为白色,把制作的网络图保存为网页格式。

visSave(network, file = "哈尔滨病例交互式传播链.html", background = "white")

图7 哈尔滨本土病例传播网络关系

内容:董墨染

编辑:蔡敏

审核:肖建鹏、刘涛

指导:马文军

关于我们 

《数据分析和应用》致力于为全国各地公共卫生与医学工作者(机构)提供专业可靠的统计咨询、研究设计、数据分析及调研报告等服务(详细见公众号菜单栏),欢迎有需要的人员和机构与我们联系。

邮箱:[email protected]

微信号:gdiph-stat

点击此处“阅读全文”,稍后片刻,即可与图交互返回搜狐,查看更多

网址:COVID https://mxgxt.com/news/view/1697937

相关内容

谢明星教授、胡豫教授团队在《Circulation》发表论文揭示新冠肺炎与深静脉血栓发生相关性
全球线上零售商SHEIN宣布开展SHEIN TOGETHER活动
月亮女神与新冠肺炎
杨海燕 教授
从无人问津到一夜爆火,我预见了这个网红数据库的结局…
英国男星杰克·奥斯本...
今晚,全球明星大咖聚集慈善音乐会,堪称本世纪最棒live aid!
爵士队鲁迪·戈贝尔和多诺万·米切尔之间“没有问题”
保罗·乔治在乔尔·恩比德、本·西蒙斯的惨败中双双站在全明星赛的立场上
东京必看展览|六大巨星艺术家联展

随便看看