首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于顶点隶属度的r GGally色边

基于顶点隶属度的r GGally色边
EN

Stack Overflow用户
提问于 2018-09-21 13:10:53
回答 1查看 63关注 0票数 0

我试图创建一个列表,根据它们连接到的顶点的分组来对图的边进行着色。如果边缘连接同一组中的两个成员,则边缘具有它们的颜色。如果边缘在不同组的成员之间,则边缘应该是灰色的。这是我的代码:

代码语言:javascript
复制
mnet = rgraph(10, mode = "graph", tprob = 0.5)
rownames(mnet)<-letters[1:10]
colnames(mnet)<-letters[1:10]
net = network(mnet, directed = FALSE, ignore.eval = FALSE, names.eval = "strength")
phono<-data.frame(letters=letters[1:10],phono=c("vowel", "consonant","consonant","consonant","vowel","consonant","consonant","consonant","vowel", "consonant"))
table(phono)
net %v% "phono" <- as.character(phono$phono)
nnet<-matrix(0, 10, 10)
for (i in 1:10){
  for (j in 1:10){
    nnet[i,j] = ifelse(phono$phono[phono$letters %in% rownames(mnet)[i]]==phono$phono[phono$letters %in% colnames(mnet)[j]],
                       as.character(phono$phono[phono$letters %in% rownames(mnet)[i]]),
                       "grey50")
  }
}
ggnet2(net, color = "phono", palette = "Set2", label = "phono", edge.color = unlist(nnet[upper.tri(nnet)])[unlist(mnet[upper.tri(mnet)])>0])

我对R代码中间的双循环不满意。有没有更好的方法来做我想做的事?这是对我之前提出的问题的回避,这个问题更多地试图理解为什么“外部”不起作用。

此外,代码一般不起作用,但让我们一次做一个问题。即使length(unlist(nnet[upper.tri(nnet)])[unlist(mnet[upper.tri(mnet)])>0])==length(net %e% "strength")

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-27 13:19:20

这就是你要找的吗?

代码:

代码语言:javascript
复制
# build graph
net <- sna::rgraph(10, mode = "graph", tprob = 0.5)
net <- network::network(net, directed = FALSE)

# vowels and consonants
phono <- c("v", "c", "c", "c", "v", "c", "c", "c", "v", "c")
names(phono) <- letters[1:10]

# extract edgelist, identify same-letter-type ties
edges <- as.edgelist(net)
k <- ifelse(phono[ edges[, 1] ] == phono[ edges[, 2] ], phono[ edges[, 1] ], NA)

# color ties using `Set2` colors
k[ is.na(k) ] <- "x"
k <- c("c" = "#66C2A5", "v" = "#FC8D62", "x" = "grey50")[ k ]

set.edge.attribute(net, "tie.type", k)
GGally::ggnet2(
  net,
  color = phono[ network.vertex.names(net) ],
  palette = "Set2",
  label = phono[ network.vertex.names(net) ],
  edge.color = "tie.type",
  edge.size = 1
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52444534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档