我正在使用igraph来着色顶点
我有两个CSV文件答案和图表拓扑.
答案:(这告诉玩家K和N正确回答)
Player Q1_I1
1 k 1
2 l 0
3 n 1
4 m 0
Run Code Online (Sandbox Code Playgroud)
拓扑:(代表谁与谁联系)
Node.1 Node.2
1 k l
2 l k
3 l m
4 m l
5 l n
6 n l
7 n k
8 k n
Run Code Online (Sandbox Code Playgroud)
我想使用包IGraph构建一个图形,并根据它们的正确性为不同颜色的顶点着色.
这就是我能够实现的目标:
# reads answers and creates a graph from topology
answers <- read.csv("answers2.csv",header=T)
data<-read.csv('edges2.csv')
data<-graph.data.frame(data1, directed=FALSE)
g<-simplify(data)
# goes through vertices and colors them in different color, depending on correctness.
# 2 means second column (First one is the players name)
V(g)$color <- ifelse(answers[V(g), 2] == 1, "blue", "red")
plot(g, layout=layout.fruchterman.reingold, vertex.color=V(g)$color)
Run Code Online (Sandbox Code Playgroud)
问题是在我的输出中颜色是错误的:
这里M和K的标记为正确的,而应该是N和K.我认为这个问题是因为我不指定节点应该与球员,我试图做到这一点,但没有成功.
有什么想法如何实现这一目标?
Gab*_*rdi 21
最简单的方法是创建包含所有元数据的图形,然后igraph处理其余部分.例如
library(igraph)
answers <- read.table(textConnection(
" Player Q1_I1
1 k 1
2 l 0
3 n 1
4 m 0
"))
topology <- read.table(textConnection(
" Node.1 Node.2
1 k l
2 l k
3 l m
4 m l
5 l n
6 n l
7 n k
8 k n
"))
g2 <- graph.data.frame(topology, vertices=answers, directed=FALSE)
g <- simplify(g2)
V(g)$color <- ifelse(V(g)$Q1_I1 == 1, "lightblue", "orange")
plot(g)
Run Code Online (Sandbox Code Playgroud)

但是,实际上如果您不在数据表中的两个方向都包含每个边,那么您甚至不需要调用简化.
问题是图表在之后排序simplify而答案向量不是.可能有一种更简单的方法,但我会简单地对你的答案表进行排序:answers <-answers[order(answers[,1]),]在设置之前V(g)$color <- ifelse(answers[V(g), 2] == 1, "blue", "red").
您可以看到您的图表已按顺序排序 get.data.frame(g, what="vertices")
或者,您可以match使用get.data.frame名称(请注意,我创建了g两次.出于某种原因,get.data.frame不能很好地使用simplify.
answers <- read.csv("c:/answers2.csv",header=T)
data1<-read.csv('c:/edges2.csv')
data2<-graph.data.frame(data1, directed=FALSE)
g<-simplify(data2)
ordered.vertices <-get.data.frame(g, what="vertices")
g<-simplify(data2)
V(g)$color <- ifelse(answers[match(answers[,1],ordered.vertices$name), 2] == 1, "blue", "red")
plot(g, layout=layout.fruchterman.reingold, vertex.color=V(g)$color)
Run Code Online (Sandbox Code Playgroud)

| 归档时间: |
|
| 查看次数: |
27472 次 |
| 最近记录: |