我想用我拥有的数据可视化网络,并希望用特定的边长来绘制它们.我使用Python,我已经尝试使用networkx和igraph进行绘图,但所有似乎都分配了固定的边长.
a.)我想知道我的代码是错误的还是包裹不是真的有能力.如何正确实现networkx或igraph的指定边长?
b.)如果networkx和igraph无法做到,您可以建议哪个包?(最好能携带超过8万个节点.)
谢谢!
有没有一种简单的方法可以根据igraph中的源和目标选择/删除边缘?
我使用的基本上是
g.es["source"] = [e.source for e in g.es]
g.es["target"] = [e.target for e in g.es]
g.es["tuple"] = [e.tuple for e in g.es]
g.es.select(target=root)
Run Code Online (Sandbox Code Playgroud)
但我觉得应该有一种方法可以做到这一点,而无需两次存储源/目标信息.
我正在使用R中的igraph包来可视化网络流.
library(igraph)
# Example Data:
b <- c("countryA", "countryB", "countryC", "countryA", "countryC", "countryA")
c <- c("countryB", "countryC", "countryA", "countryB", "countryA", "countryB")
d<- c(100, 200, 200, 300, 400, 200)
e <- c(5,12,10,24,25,12)
mydata <- data.frame(b,c,d,e)
colnames(mydata) <- c("exporteur", "partner", "tradeflow", "price")
# Plot in igraph
mydata.igraph <- graph.data.frame(mydata)
E(mydata.igraph)$label <- mydata[,3]
plot(mydata.igraph)
Run Code Online (Sandbox Code Playgroud)
如您所见,我的边缘标签(箭头标签)重叠.怎么解决这个?
提前致谢!
我正在编写一个接收图形作为输入的函数.我需要做的第一件事是确定图的顺序(即图中的顶点数).
我的意思是,我可以使用g.summary()(返回包含顶点数量的字符串),但是我会解析字符串以获得顶点的数量 - 而这只是令人讨厌的.
获得我正在使用的边数len(g.get_edgelist()),这是有效的.但是没有g.get_vertexlist(),所以我不能使用相同的方法.
当然,有一种简单的方法可以做到这一点,不涉及解析字符串.
我想将图表折叠到各自的社区/群集中.让我用以下玩具示例来说明这一点:
set.seed(123)
#toy graph
g <- barabasi.game(10) %>%
as.undirected()
#identify communities
c_g <- fastgreedy.community(g)
Run Code Online (Sandbox Code Playgroud)
有三个社区,如下图所示.
我想减少顶点的折叠,以便结果图中的顶点对应于先前顶点的成员资格.见图表.
我是新手igraph包,我不熟悉处理igraph对象的最佳方法.
我想构建一个有向网络图的子图,其中所有顶点共享一个顶点属性(比如,V(Grph)$ year =="1952")和它们的一阶(立即)邻居,基于只有在外面.
我试过ego(),make_ego_graph(),neighbors(),和adjacent_vertices().
例如,
CitGraph <- make_ego_graph(Grph, 1, nodes = which(V(Grph)$year=="1952"), mode = "out")
产生一个图表列表(而不是单个综合图表),并且令人惊讶的是,今年50k顶点需要两个小时,并且指向了150k个邻居.
我能想到的一种方法是聚合列表中的所有这些图,但不知道如何.此外,我想保留顶点属性,因为我的最终目标是assortativity_nominal()根据另一个顶点属性(在这种情况下为地理位置)进行计算.
预先感谢您提出的任何建议!
我正在开展一个小项目,涉及查找图表的社区结构和绘图.我正在使用label.propagation.community算法进行社区检测,并使用以下代码行进行绘图:
plot(community_1, graph_1)
Run Code Online (Sandbox Code Playgroud)
问题是图表显示了使得图表看起来更拥挤的顶点标签.有什么办法可以摆脱剧情中的这些标签吗?我不想修改图表和社区中的任何内容; 只是想告诉情节不要打印标签.
我想知道,使用时igraph,可以根据不同边缘属性的值将边添加到图形中.
我有一个data.frame,dput如下所示:
df <- structure(list(nodeA = c("CFTR", "CFTR", "CFTR", "CFTR", "CFTR",
"CFTR"), nodeB = c("CYP7A1", "KRT16", "ABCA3", "SLC22A11",
"PBK", "ACSM1"), score = c(0.239, 0.24, 0.292, 0.269,
0.233, 0.168), text = c(129L, 0L, 287L, 246L,
161L, 155L), mining = c(163L, 241L, 413L, 71L, 92L, 56L),
experiments = c(0L, 0L, 101L, 0L, 75L, 0L), homologs =c(0L,
0L, 609L, 0L, 0L, 0L)), .Names = c("nodeA", "nodeB",
"score", "text", "mining","experiments",
"homologs"), class = "data.frame", row.names = c(NA, 6L))
Run Code Online (Sandbox Code Playgroud)
我想在图(g …
我正在构建一个基因网络.我有一个两列数据框,我转换成和邻接矩阵,并在igraph中使用它.问题是我有自我循环的基因,我想摆脱自我循环,然后摆脱没有边缘(可能与网络隔离)的顶点.我尝试了一些东西,但不知怎的,它们不起作用.我的代码是
InnatedGraph <- graph.data.frame(innate,directed=FALSE)
V(InnatedGraph)$label.cex = 0.4
plot(InnatedGraph,vertex.label=V(InnatedGraph)$symbol, vertex.size=5)
Run Code Online (Sandbox Code Playgroud)
先天是我的两列数据框架.我已经尝试过度函数去除0度的顶点,但我猜不幸它不起作用(也许becoz自环基因有1度).
bad.vs<-V(InnatedGraph)[degree(InnatedGraph) == 0]
clean <-delete.vertices(InnatedGraph, bad.vs)
Run Code Online (Sandbox Code Playgroud)
我尝试使用包装BioNet"rmSelfLoops"中的另一个函数,借助它我可以移除自循环边但仍然无法移除没有边的顶点.
test<-rmSelfLoops(InnatedGraph)
Run Code Online (Sandbox Code Playgroud)
我正在研究一个项目,但是我达到了这一点,但实际上我在一周前就被困在了它上面,我尝试了很多想法,但所有试验来编码我的算法都失败了.
为了边缘是:1--3,1--4,3--2
对于每个边,在每个顶点上定义随机游走以移动到其中一个邻居,如:
对于第一个边缘,v1=1 ,v2=3, n1=3,4并n2=1,2在顺序,因此从v1和v2中的可能动作是:
1 to 3,3 to 1
1 to 4,3 to 1
1 to 3,3 to 2
1 to 4,3 to 2
Run Code Online (Sandbox Code Playgroud)
对于第二边缘,v1=1 ,v2=4, n1=3,4和n2=1在顺序,因此从v1和v2中的可能动作是:
1 to 3,4 to 1
1 to 4,3 to 1
Run Code Online (Sandbox Code Playgroud)
对于第三边缘,v1=3 ,v2=2, n1=1,2和n2=3在顺序,因此从v1和v2中的可能动作是:
3 to 1,2 to 3
3 to 2,2 to 3
Run Code Online (Sandbox Code Playgroud)
对于整个图形,只有8个可能的移动,因此我有8个变量来构造约束矩阵
让我们用x表示移动(根据它们的出现顺序); 即
(1 to 3,3 to …Run Code Online (Sandbox Code Playgroud)