R:顶点属性与圆弧图中的顶点名称不匹配

时间:2014-12-04 04:22:24

标签: r plot igraph

我希望创建一个联网的弧形图。我的问题是弧是正确的,节点的顺序也是如此。但是,节点(度)和填充和边框颜色(vfill,vborder)的大小与顶点不匹配'属性。

我的.gml文件可以在https://dl.dropboxusercontent.com/u/42761499/myarc.gml

下载

代码:

library(igraph)
library(arcdiagram)
dat.g2 = read.graph("myarc.gml", format = "gml")
vlabels<-get.vertex.attribute(dat.g2, "name")
vfill<-get.vertex.attribute(dat.g2, "vfill")
vborder<-get.vertex.attribute(dat.g2, "vborder")
vgroups<-get.vertex.attribute(dat.g2, "group")
degrees<-get.vertex.attribute(dat.g2,"degree")
edgelist<-get.edgelist(dat.g2)
values<-as.numeric(get.edge.attribute(dat.g2, "value"))
par(mai=c(2.25,.25,.25,.25))
arc.p<-arcplot(edgelist, cex.labels = 0.8,
           ordering = vlabels,
           show.nodes = TRUE, 
           col.nodes = vborder, 
           bg.nodes = vfill, 
           cex.nodes = sqrt(degrees)/20,
           pch.nodes = 21, 
           lwd.nodes = 2, 
           line = 0.3,
           col.arcs = hsv(0, 0, 0.1, 0.4), 
           lwd.arcs = sqrt(values)/2,
           horizontal=TRUE,
           axes=FALSE)

在图中,颜色和节点大小有时是错误的。 &#34;其他投诉&#34;应该是紫色和CHPAIN黄色。至少CHPAIN和CARDOTH的大小是错误的(CHPAIN大于CARDOTH,请参阅myarc.gml)。我认为问题是因为在边缘列表中,每个节点的名称首先出现的顺序与顶点顺序略有不同。 通过边缘列表顺序,我指的是一个节点名称的第一个独特外观,当一个查看整个行然后向下看列。即边缘列表的前5行显示:

  • 1胸痛,MI,CA,VF AF
  • 2胸痛,MI,CA,VF晕厥
  • 3胸痛,MI,CA,VF SOB
  • 4 Chest Pain,MI,CA,VF CHPAIN
  • 5胸痛,MI,CA,VF CARDOTH

所以边缘列表顺序是&#34;胸痛,心肌梗死,心肺复苏术,心肺血管疾病&#34; ,&#34; AF&#34;,&#34;晕厥&#34;,&#34; SOB&#34;,&#34; CHPAIN&#34;,&#34; CARDOTH&#34; ... 顶点顺序是&#34;胸痛,MI,CA,VF&#34; ,&#34; AF&#34;,&#34;晕厥&#34;,&#34; SOB&#34;,&#34;其他投诉&#34;,&#34; CHPAIN&#34; ... < / p>

如何获取顶点属性(vfill,vborder,degrees)以匹配图表上的顶点名称?

1 个答案:

答案 0 :(得分:2)

您只需要明确设置vertices=参数。这就是函数如何知道保留每个*.nodes属性的值。您可以使用它来代替您现在设置的ordering=参数,因为您根本没有重新排序节点。

arc.p<-arcplot(edgelist, vlabels, cex.labels = 0.8,
    show.nodes = TRUE, 
    col.nodes = vborder, 
    bg.nodes = vfill, 
    cex.nodes = sqrt(degrees)/20,
    pch.nodes = 21, 
    lwd.nodes = 2, 
    line = 0.3,
    col.arcs = hsv(0, 0, 0.1, 0.4), 
    lwd.arcs = sqrt(values)/2,
    horizontal=TRUE,
    axes=FALSE)

enter image description here