【问题标题】:Unable to plot a network on igraph无法在 igraph 上绘制网络
【发布时间】:2017-03-18 15:12:11
【问题描述】:

我的二元图基于边列表。每个顶点都是股​​票市场的行情代码(例如:BARC= Barclay's)

    net_full_phase1=graph.edgelist(full_phase1, directed=FALSE)
V(net_full_phase1)$color=V(net_full_phase1)$name
V(net_full_phase1)$size=degree(net_full_phase1)
V(net_full_phase1)$color=gsub("BARC", "slategrey", V(net_full_phase1)$color)
V(net_full_phase1)$color=gsub("BNP", "blue", V(net_full_phase1)$color)
V(net_full_phase1)$color=gsub("CBK", "black", V(net_full_phase1)$color)
V(net_full_phase1)$color=gsub("WFC", "red", V(net_full_phase1)$color)
V(net_full_phase1)$color=gsub("BKIR", "orange", V(net_full_phase1)$color)
V(net_full_phase1)$color=gsub("ISP", "purple", V(net_full_phase1)$color)
V(net_full_phase1)$color=gsub("TPEIR", "lightblue", V(net_full_phase1)$color)
V(net_full_phase1)$color=gsub("SAB", "yellow", V(net_full_phase1)$color)
V(net_full_phase1)$color=gsub("BCP", "green", V(net_full_phase1)$color) 

plot(net_full_phase1, layout=layout.fruchterman.reingold)

我得到这个错误:

符号错误(x = coords[, 1], y = coords[, 2], bg = vertex.color, : nom de couleur 'WFred' 不正确

刚跑unique(as.character(V(net_full_phase1)$name)) 结果如下:

"BARC"  "WFC"   "ISP"   "TPEIR" "BCP"   "SAB"   "BNP"   "CBK"   "BKIR" 

我也跑了:table(V(net_full_phase1)$color) 结果:

black blue BredP green lightblue purple red redIR slategrey WFred yellow

为什么 R 不将某些颜色视为“BredP”、“redIR”、“WFred”?

【问题讨论】:

  • 我认为它告诉您gsub("WFC", "red", V(net_full_phase1)$color) 不会评估为有效颜色......不知何故,对我来说并不明显。我会先自己运行那段代码,可能包含在 table() 中。
  • 或扩展 Frank 的建议,在运行所有 gsub 后查看table(V(net_full_phase1)$color)。有哪些颜色?
  • 我可以在没有颜色规范的情况下运行代码。一旦我对颜色进行编码,它就不起作用了。刚跑 table(V(net_full_phase1)$color) 结果是: black blue BredP green lightblue Purple red redIR slategrey UredG WFred yellow
  • 好的,谢谢。很明显,其中一些不是颜色。
  • 意思是“橙色”被“翻译”为:UredG、WFred、redIR和BredP?

标签: r plot colors igraph


【解决方案1】:

我猜您使用 gsub 时出了点问题。以下是我的处理方法。

# Your vector of unique names 
nms <- c("BARC", "WFC", "ISP" ,"TPEIR" ,"BCP" ,"SAB" ,"BNP", "CBK" ,"BKIR")

创建与示例中相同顶点名称的小图

library(igraph)
g <- random.graph.game(length(nms), 0.5)
V(g)$name <- nms

创建查找表以将名称与颜色匹配:这会将颜色分配给唯一的顶点名称

lookup <- setNames(
  c("slategrey", "red", "purple", "lightblue", "green", "yellow", "blue", "black", "orange"),
  nms)

# have a look at object
lookup
#        BARC         WFC         ISP       TPEIR         BCP 
# "slategrey"       "red"    "purple" "lightblue"     "green" 
#         SAB         BNP         CBK        BKIR 
#    "yellow"      "blue"     "black"    "orange" 

然后我们可以使用子集 ([) 将这些分配给顶点颜色属性

V(g)$color <- lookup[V(g)$name]
#  have a look at what is produced
V(g)$color 
# [1] "slategrey" "red"       "purple"    "lightblue" "green"    
# [6] "yellow"    "blue"      "black"     "orange"  

哪个产生


PS,我无法重现您的 gsub 结果:代码可以正常工作

# Your vector of unique names 
nms <- c("BARC", "WFC", "ISP" ,"TPEIR" ,"BCP" ,"SAB" ,"BNP", "CBK" ,"BKIR")

nms = gsub("BARC", "slategrey", nms )
nms = gsub("BNP", "blue", nms )
nms = gsub("CBK", "black", nms )
nms = gsub("WFC", "red", nms )
nms = gsub("BKIR", "orange", nms )
nms = gsub("ISP", "purple", nms )
nms = gsub("TPEIR", "lightblue", nms )
nms = gsub("SAB", "yellow", nms )
nms = gsub("BCP", "green", nms )

# look at result
nms
# [1] "slategrey" "red"       "purple"    "lightblue" "green"     "yellow"    "blue"     
# [8] "black"     "orange"  

【讨论】:

  • 这是我根据您的回答修改的代码。 #full_phase1 是边缘列表# net_full_phase1=graph.edgelist(full_phase1,directed=FALSE) V(net_full_phase1)$size=degree(net_full_phase1) names
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 2016-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多