给出这个初始图:
import networkx as nx
G=nx.MultiGraph()
fromnodes=[0,0,1,1,1,1,1,2,3,4,5,5,5,7,8,9,10]
tonodes=[1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
dupedgeind=0
for x,y in zip(fromnodes,tonodes):
if G.has_edge(x,y):
dupedgeind=dupedgeind+1
G.add_edge(x,y,key=dupedgeind)
else:
dupedgeind=0
G.add_edge(x,y,key=dupedgeind)
Run Code Online (Sandbox Code Playgroud)
有人可以重新创建此错误吗?
pos=nx.nx_agraph.pygraphviz_layout(G,prog='sfdp')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\networkx\drawing\nx_agraph.py", line 262, in pygraphviz_layout
A=to_agraph(G)
File "C:\Python27\lib\site-packages\networkx\drawing\nx_agraph.py", line 155, in to_agraph
A.add_edge(u,v,key=str(key),**str_edgedata)
File "C:\Python27\lib\site-packages\pygraphviz\agraph.py", line 484, in add_edge
eh = gv.agedge(self.handle, uh, vh, key, _Action.find)
KeyError: 'agedge: no key'
Run Code Online (Sandbox Code Playgroud)
问题与调用graphviz的老化函数有关,它似乎与key参数的格式不一样; 当我改变时(第480行agraph.py):
...
eh = gv.agedge(self.handle, uh, vh, key , _Action.create)
... …Run Code Online (Sandbox Code Playgroud) 我迷上了使用Python和NetworkX来分析图形,因为我学到更多,我想使用越来越多的数据(猜测我正在变成一个数据迷:-).最终我认为我的NetworkX图形(存储为dict的dict)将超出我系统的内存.我知道我可能只是添加更多内存,但我想知道是否有办法将NetworkX与Hbase或类似解决方案集成?
我环顾四周,找不到任何东西,但我也找不到与允许简单的MySQL后端相关的任何东西.
这可能吗?是否存在允许连接到某种持久存储的任何东西?
谢谢!
更新:我记得在"社交网络分析初创公司"中看过这个主题,作者谈到了其他存储方法(包括hbase,s3等),但没有说明如何做到这一点或是否可行.
绘制一个集团图
import networkx as nx
....
nx.draw(G, layout=nx.spring_layout(G))
Run Code Online (Sandbox Code Playgroud)
产生如下图:

显然,需要增加节点之间的间隔(例如,边缘长度).我用谷歌搜索了这个,并在这里找到了这个建议:
对于某些布局算法,存在可能有帮助的"缩放"参数.例如
在1中:将networkx导入为nx
在2:G = nx.path_graph(4)
在[3]中:pos = nx.spring_layout(G)#default to scale = 1
在[4]中:nx.draw(G,pos)
在[5]中:pos = nx.spring_layout(G,scale = 2)#所有节点之间的双倍距离
在[6]中:nx.draw(G,pos)
但是,该scale参数似乎没有任何影响.
获得更好绘图的正确方法是什么?
我正在努力学习一些Python图形可视化.我发现了一些博客文章做了一些 我想尝试的事情.不幸的是我没有走得太远,遇到这个错误:AttributeError: 'module' object has no attribute 'graphviz_layout'
在我的系统上重现错误的最简单的代码片段是这样的,
In [1]: import networkx as nx
In [2]: G=nx.complete_graph(5)
In [3]: nx.draw_graphviz(G)
------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-3-481ad1c1771c> in <module>()
----> 1 nx.draw_graphviz(G)
/usr/lib/python2.7/site-packages/networkx/drawing/nx_pylab.pyc in draw_graphviz(G, prog, **kwargs)
982 See networkx.draw_networkx() for a description of optional keywords.
983 """
--> 984 pos = nx.drawing.graphviz_layout(G, prog)
985 draw(G, pos, **kwargs)
986
AttributeError: 'module' object has no attribute 'graphviz_layout'
Run Code Online (Sandbox Code Playgroud)
我正在尝试在NetworkX中绘制任何图形,但什么都没有,甚至没有错误:
import networkx as nx
import matplotlib.pyplot as plt
g1=nx.petersen_graph()
nx.draw(g1)
Run Code Online (Sandbox Code Playgroud) 我创建了我的图表,到目前为止一切看起来都很棒,但我希望在创建后更新节点的颜色.
我的目标是可视化DFS,我将首先显示初始图形,然后在DFS解决问题时逐步显示颜色节点.
谢谢
UPDATE
如果有人有兴趣,可以在Github上获得示例代码
因此,我创建了一种非常天真(可能效率低下)的生成哈希图的方法.
题:
我有4个维度... .p q r s
我想统一显示它(tesseract),但我不知道如何重塑它.如何在Python中重塑网络图?
我见过的人使用一些例子spring_layout()和draw_circular(),但它不能在我要找的,因为他们不是统一的方式塑造.
有没有办法重塑我的图形并使其统一?(即将我的hasse图重塑为tesseract形状(最好使用nx.draw())
这是我目前的样子:

这是我生成N维的哈希图的代码
#!/usr/bin/python
import networkx as nx
import matplotlib.pyplot as plt
import itertools
H = nx.DiGraph()
axis_labels = ['p','q','r','s']
D_len_node = {}
#Iterate through axis labels
for i in xrange(0,len(axis_labels)+1):
#Create edge from empty set
if i == 0:
for ax in axis_labels:
H.add_edge('O',ax)
else:
#Create all non-overlapping combinations
combinations = [c for c in itertools.combinations(axis_labels,i)]
D_len_node[i] = combinations
#Create edge …Run Code Online (Sandbox Code Playgroud) 在题为" 度量相关性的缩放"及其对无标度网络中的扩散的影响的论文中,作者定义了$ E_b(k)$的数量来衡量度相关程度.
LK Gallos,C.Song和HA Makse,度量相关性的比例及其对无标度网络扩散的影响,物理学.莱特牧师.100,248701(2008).
我的问题是如何使用Python计算网络的Eb(k)?我的问题是我无法重现作者的结果.我使用Condense Matter数据进行测试.Eb(k)的结果如上图所示.您可以看到我的图中的一个问题是Eb(k)远大于1!!我也尝试了互联网(作为级别数据)和WWW数据,问题仍然存在.毫无疑问,我的算法或代码存在严重问题.您可以重现我的结果,并将其与作者进行比较.您的解决方案或建议非常感谢.我将在下面介绍我的算法和python脚本.
python脚本如下:
%matplotlib inline
import networkx as nx
import matplotlib.cm as cm
import matplotlib.pyplot as plt
from collections import defaultdict
def ebks(g, b):
edge_dict = defaultdict(lambda: defaultdict(int))
degree_dict = defaultdict(int)
edge_degree = [sorted(g.degree(e).values()) for e in g.edges()]
for e in edge_degree:
edge_dict[e[0]][e[-1]] +=1
for i in g.degree().values(): …Run Code Online (Sandbox Code Playgroud) 我试图networkx在项目中使用一些图形表示,我不知道如何做一些应该简单的事情.我创建了一个带有一堆节点和边的有向图,这样在这个图中只有一个根元素.现在,我想做的是从根开始,然后遍历每个元素的子元素并从中提取一些信息.我如何获得这个DiGraph的根元素?
所以它会是这样的:
#This is NOT real code, just pseudopython to convey the general intent of what I'd like to do
root = myDiGraph.root()
for child in root.children():
iterateThroughChildren(child)
def iterateThroughChildren(parent):
if parent.hasNoChildren(): return
for child in parent.children():
//do something
//
iterateThroughChildren(child)
Run Code Online (Sandbox Code Playgroud)
我没有在文档中看到任何提示检索DiGraph根的简单方法 - 我应该手动推断这个吗?:O我试着iter(myDiGraph)希望它会从根开始迭代,但顺序似乎是随机的......:\
将不胜感激,谢谢!
我仍然是networkx的初学者我想在不同的位置添加多种类型的节点,我使用了以下代码
pos = {0: (40, 20), 1: (20, 30), 2: (40, 30), 3: (30, 10)}
X=nx.Graph()
nx.draw_networkx_nodes(X,pos,node_size=3000,nodelist=[0,1,2,3],node_color='r')
Run Code Online (Sandbox Code Playgroud)
但是当我想访问Graph X时,如果我输入X.node它会返回一个空列表,如果我想添加更多节点,我必须使用pos字典在开头设置它们的位置.
如何使用add_node()将节点添加到特定位置x和y中的图形
networkx ×10
python ×10
graph ×2
graphviz ×2
matplotlib ×2
algorithm ×1
c ×1
correlation ×1
graph-theory ×1
ipython ×1
nodes ×1
nosql ×1
pygraphviz ×1
shape ×1
swig ×1