我希望创建一个联网的弧形图。我的问题是弧是正确的,节点的顺序也是如此。但是,节点(度)和填充和边框颜色(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行显示:
所以边缘列表顺序是&#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)以匹配图表上的顶点名称?
答案 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)