我是R.的新人.我正在使用igraph库.我是新用的这样的库.
我有个问题:
我有一个文本文件中的边列表.它有两列.第一个具有初始节点,第二个具有结束节点.
我正在阅读文件:
g1 <-read.table ("g1.txt")
Run Code Online (Sandbox Code Playgroud)
阅读是成功的.
与ls.str(g1)我得到:
V1 : int [1:995] 0 0 0 0 0 0 0 0 0 0 ...
V2 : int [1:995] 2 3 4 5 6 7 8 9 10 11 ...
Run Code Online (Sandbox Code Playgroud)
当我尝试使用刚刚加载的边缘定义图形时,我得到:
Error in graph(g1) : (list) object cannot be coerced to type 'double'
Run Code Online (Sandbox Code Playgroud)
如何从文件的边缘定义图形,避免上述错误?
我有这些载体:
>dput(SHLRK03)
c("CHSLSCR01", "SHLRK04", "SHLRK05", "WLLWCR01", "WLLWCR02",
"WNBGORV01", "WNBGORV02", "WNBGORV03", "WNBGORV04", "WNBGORV05",
"WNBGORV06")
> dput(SHLRK04)
"SHLRK05"
> dput(WNBGORV01)
c("WLLWCR02", "WNBGORV02", "WNBGORV03", "WNBGORV04", "WNBGORV05",
"WNBGORV06")
Run Code Online (Sandbox Code Playgroud)
我希望通过以下方式获得单个连接图:
我还有几个相互连接的值.我试图在堆栈溢出和网络上搜索这种类型的图,但无法找到任何示例.
有人可以帮帮我吗?我感谢您的时间和精力.
我们可以在R-igraph中改变文本大小和节点大小吗?如果是,我们可以使用什么属性?任何例子?
(通过文字我的意思是节点名称)

例如,我使用igraph函数在网络上绘制如下:
plot.igraph(net,vertex.label=V(net)$name,layout=layout.fruchterman.reingold,
edge.color="black",edge.width=Eweight,edge.curved=F)
Run Code Online (Sandbox Code Playgroud)
如果我们查看与每个节点对应的标签,则每个节点具有相同的大小.我想根据相应的节点大小改变这个标签大小.例如尺寸("w1")>尺寸("w5")>尺寸("w6")等.
我正在尝试使用以下步骤在R中实现页面排名算法:
加载如下的示例图:
0 1
0 2
0 3
1 2
1 5
2 0
2 4
3 1
3 0
3 4
4 1
4 5
5 2
5 3
Run Code Online (Sandbox Code Playgroud)从该图中创建一个邻接矩阵
以下是实现所有这些步骤的代码:
g = read.graph(x)
a = get.adjacency(g)
markov = a / rowSums(a)
e = eigen(t(markov))
v <- e$vec[,1]
normalized <- v / sum(v)
Run Code Online (Sandbox Code Playgroud)
当我将标准化对象的向量与page.rank(g)为这个特定图形生成的向量进行比较时,它们几乎相同,只有细微差别.但是,当我在此图表上尝试时:
0 1
0 2
0 3
1 2
1 5
2 0
2 4
3 1
3 0
3 4
4 1
4 …Run Code Online (Sandbox Code Playgroud) 我有一个缠绕在圆环上的晶格(图末尾的每个节点都链接到它们在网格上的相对节点)。
require("igraph")
require("rgl")
n = 10
g = graph.lattice(c(n,n)) # create a square lattice (nxn)
plot(g,vertex.size = 0.5,vertex.size = 4,vertex.label = NA,vertex.color = "red")
# want to connect up the corners (horribly done)
v1 = seq(from =1, to = n,by = 1)
v2 = seq(from = n, to = n^2, by = n)
v3 = seq(from = n^2, to = n^2 - n+1, by = -1)
v4 = seq(from = v3[length(v3)],to = 1,by = -n)
a = cbind(rbind(v1,v2), rbind(v3,v4))
a2 …Run Code Online (Sandbox Code Playgroud) 我是新来的Python很抱歉,如果这是如此简单,我想删除所有edges这些的weight就是zero,但与此代码我只是能够一次删除一个边缘,如何使它在客场,这将删除所有边缘?
ig.summary(graph_like)
IGRAPH D-W- 5390 40276 --
graph_like.delete_edges("weight"==0);
ig.summary(graph_like)
IGRAPH D-W- 5390 40275 --
Run Code Online (Sandbox Code Playgroud)
先感谢您
我想获得图中所有周期的子图。我尝试了下面的代码
for (i in 1:length(cycles)){
vids<-as.numeric(unlist(cycles[[i]]))
subgraph<- induced.subgraph(graph, vids)
}
Run Code Online (Sandbox Code Playgroud)
但是它会抛出如下错误:
Error in .Call("R_igraph_induced_subgraph", graph, vids - 1, impl, PACKAGE = "igraph") :
At iterators.c:759 : Cannot create iterator, invalid vertex id, Invalid vertex id
Run Code Online (Sandbox Code Playgroud)
我发现该代码可与cycles列表中的第二个元素一起使用,该元素较短,但第一个元素不是。因此,如果我尝试这样做会起作用,
subgraph<- induced.subgraph(g, c(3,4))
Run Code Online (Sandbox Code Playgroud)
但不是
subgraph<- induced.subgraph(g, c(26, 2, 30, 29, 25, 9, 27, 13, 14, 8, 23, 20, 19, 17, 12, 11, 24, 21, 6, 28, 15,3,4))
Run Code Online (Sandbox Code Playgroud)
同样,欢迎提出任何替代for循环的建议。
一个可重现的示例:
library(igraph)
graph<-graph(c(1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,16,
16,17,17,18,18,19,19,20,20,21,21,1,22,23,23,22),directed=T)
V(graph)$name<-c(26, 2, 30, 29, 25, 9, 27, 13, 14, 8, …Run Code Online (Sandbox Code Playgroud) 我正在尝试为节点列表创建网络邻居的数据集.我虽然可以使用lapply函数来执行此操作,其中我使用neighbors命令.作为一个额外的复杂功能,我的一些查找节点不在图中,但无论如何我无法使其工作.
这是一个例子:
edgelist <- read.table(text = "
A B
B C
C D
D E
C F
F G")
testlist <- read.table(text = "
A
H
C
D
J")
testlist2 <- read.table(text = "
A
C
B
D
E")
library(igraph)
graph <- graph.data.frame(edgelist)
str(graph)
neighbors<- lapply(testlist2, function(p) { #Each pledge_id
temp=neighbors(graph,p) #Find all the neighbors for that pledge
return(temp)
})
neighbors<- lapply(testlist, function(p) { #Each pledge_id
temp=neighbors(graph,p) #Find all the neighbors for that pledge
return(temp)
})
Run Code Online (Sandbox Code Playgroud)
不幸的是,这两种情况下都会返回hogwash.我错过了什么?
我想要的输出将是这样的:
lookupnode neighbor …Run Code Online (Sandbox Code Playgroud) 我正在研究使用R和igraph在亚马逊上一起购买的政治书籍的可视化.我已经能够以一种形式获得网络图,这种形式揭示了某些书籍落入某个位置的方式,表明他们不仅仅是购买其他具有相同政治观点的书籍的人购买的.这是图表:

我的问题是,如果所有这些书都在更紧密的集群中,那么阅读标签是非常不可能的.如果我能够在不掩盖连接集群的少数标题的中间位置的情况下,我想扩展这些集群.
有没有人对我如何做到这一点有任何想法?
为了生成此图,我将此数据作为gml文件读入,然后执行以下操作:
g<-read.graph("data/polbooks/polbooks.gml", format=c("gml"))
V(g)$degree <- degree(g, mode="all")
cut.off <- mean(V(g)$degree)
sub <- induced_subgraph(g, which(V(g)$degree>cut.off))
plot(sub, vertex.shape="none", vertex.size=1,
vertex.label.color=ifelse(V(sub)$value=="l", "blue", "red"),
layout=layout_with_fr)
Run Code Online (Sandbox Code Playgroud)
我已经尝试了几种内置布局,但它们都没有真正产生预期的结果.
我想根据连接边的数量看到节点/顶点的大小.例如,如果节点1与其他节点具有更多数量的连接边,则节点1的大小应更大.我已经采用了一个假设的简单数据和尝试网络图,它运作得相当好.基本上,网络图是关于共同作者网络.但是,我想根据连接边的数量调整节点的大小.另外,我想知道如何自定义边缘颜色?例如,如果节点1具有多于4个连接,则所有4个边缘的颜色应为红色.
以下是表现良好的代码:
library(igraph)
# original data as a list
input_data = list(c(1,2,3),c(1,4,5),c(1,6),c(3),c(4,6))
## function that makes all pairs
pairing <- function(x) {
n = length(x)
if (n<2) {
res <- NULL
} else {
q <- combn(n,2)
x2 <- x[q]
#dim(x2) <- dim(q)
res <- x2
}
return(res)
}
## for each paper create all author pairs
pairing_bypaper = lapply(input_data,pairing)
## remove papers that contribute no edges
pair_noedge = sapply(pairing_bypaper,is.null)
pair2_bypaper <- pairing_bypaper[!pair_noedge]
## combine all 'subgraphs'
pair_all <- do.call('c',pair2_bypaper) …Run Code Online (Sandbox Code Playgroud)