我有一个大的只读数据结构(在networkx中加载的图形,虽然这不应该很重要),我在我的Web服务中使用.Web服务是在Flask中构建的,然后通过Gunicorn提供服务.事实证明,对于我旋转的每个枪支工作者来说,这个工作都拥有我自己的数据结构副本.因此,当我有8个运行时,我的~700mb数据结构可以完全由一个工人管理,变成了一个非常大的内存.有没有什么方法可以在gunicorn进程之间共享这个数据结构,所以我不必浪费那么多内存?
假设我有两个networkx图,G并且H:
G=nx.Graph()
fromnodes=[0,1,1,1,1,1,2]
tonodes=[1,2,3,4,5,6,7]
for x,y in zip(fromnodes,tonodes):
G.add_edge(x,y)
H=nx.Graph()
fromnodes=range(2,8)
tonodes=range(8,14)
for x,y in zip(fromnodes,tonodes):
H.add_edge(x,y)
Run Code Online (Sandbox Code Playgroud)
加入两个networkx图表的最佳方法是什么?
我想保留节点名称(注意公共节点,2到7).当我使用时nx.disjoint_union(G,H),这没有发生:
>>> G.nodes()
[0, 1, 2, 3, 4, 5, 6, 7]
>>> H.nodes()
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
>>> Un= nx.disjoint_union(G,H)
>>> Un.nodes()
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
#
Run Code Online (Sandbox Code Playgroud)
该H节点标签被改变(不是我想要的).我想在具有相同编号的节点处加入图形.
只是想知道是否有方便的networkx函数返回连接到图中的给定节点(或节点)(例如my_node_name)的边的列表(例如G).
我可以这样做:
edlist=[]
for ed in G.edges():
if 'my_node_name' in ed:
edlist.append(ed)
Run Code Online (Sandbox Code Playgroud)
但期望可能有更好的方法?
使用NetworkX和新的库,进行社交网络分析查询.通过查询,我的意思是按边缘节点的属性选择/创建子图,其中边创建路径,节点包含属性.该图表使用的是表格的MultiDiGraph
G2 = nx.MultiDiGraph()
G2.add_node( "UserA", { "type" :"Cat" } )
G2.add_node( "UserB", { "type" :"Dog" } )
G2.add_node( "UserC", { "type" :"Mouse" } )
G2.add_node( "Likes", { "type" :"Feeling" } )
G2.add_node( "Hates", { "type" :"Feeling" } )
G2.add_edge( "UserA", 'Hates' , statementid="1" )
G2.add_edge( "Hates", 'UserB' , statementid="1" )
G2.add_edge( "UserC", 'Hates' , statementid="2" )
G2.add_edge( "Hates", 'UserA' , statementid="2" )
G2.add_edge( "UserB", 'Hates' , statementid="3" )
G2.add_edge( "Hates", 'UserA' , statementid="3" )
G2.add_edge( "UserC", 'Likes' , statementid="3" …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用networkx 1.11绘制一些DAG,但我遇到了一些错误,这是测试:
import networkx as nx
print nx.__version__
G = nx.DiGraph()
G.add_node(1,level=1)
G.add_node(2,level=2)
G.add_node(3,level=2)
G.add_node(4,level=3)
G.add_edge(1,2)
G.add_edge(1,3)
G.add_edge(2,4)
import pylab as plt
nx.draw_graphviz(G, node_size=1600, cmap=plt.cm.Blues,
node_color=range(len(G)),
prog='dot')
plt.show()
Run Code Online (Sandbox Code Playgroud)
这是追溯:
Traceback (most recent call last):
File "D:\sources\personal\python\framework\stackoverflow\test_dfs.py", line 69, in <module>
prog='dot')
File "d:\virtual_envs\py2711\lib\site-packages\networkx\drawing\nx_pylab.py", line 984, in draw_graphviz
pos = nx.drawing.graphviz_layout(G, prog)
AttributeError: 'module' object has no attribute 'graphviz_layout'
Run Code Online (Sandbox Code Playgroud)
我正在使用python 2.7.11 x64,networkx 1.11,我已经安装了在PATH 中可用的graphviz-2.38dot.我错过了什么?
一旦它工作,我怎么能用以下节点绘制图形:
类似于下图的东西
正如您在该图像中看到的那样,节点非常好地对齐

以上是我当前图表的输出.但是,我还没有管理我想要实现的目标.我需要以更大的尺寸输出我的图形,以便可以轻松查看每个节点/边缘.
我试过了nx.draw(G, node_size=size),但这只会增加节点的大小,而不是节点和边缘之间的距离.
我正在尝试显示我的类层次结构的树形图,我networkx.将它全部正确绘制,并且显示正常.但是作为一个带有交叉边的圆形图,它是一个纯粹的层次结构,似乎我应该能够将它显示为树.
我已经广泛搜索了这个,并且提供的每个解决方案都涉及使用pygraphviz......但是PyGraphviz不能使用Python 3(来自pygraphviz网站的文档).
有没有人能够在Python 3中获得树形图显示?
似乎在networkx中应该有一个方法来导出json图形格式,但我没有看到它.我想这应该很容易用nx.to_dict_of_dicts(),但需要一些操作.有人知道一个简单而优雅的解决方案吗?
我需要从networkx生成一个完全连接的子图,从我想要连接的节点列表开始.基本上,我希望传递给函数的列表中的所有节点都相互连接.
我想知道是否有任何内置函数来实现这一点(我还没有找到)?或者我应该考虑一些算法?
非常感谢你.
我有networkx v. 2.1.为了使它与pandas数据帧一起工作,我尝试了以下内容:
pip3,这不会Atrribute Error在标题中生成,因此卸载.python3 setup.py install" 重新安装错误说明.
AttributeError:模块'networkx'没有属性'from_pandas_dataframe`
重现错误的步骤:
我使用导入数据csv.我这样做是因为我只想从数据集中读取5000行.
x=pd.DataFrame([x for x in rawData[:5000]])
x[:10]
0 1 2
0 228055 231908 1
1 228056 228899 1
2 228050 230029 1
3 228059 230564 1
4 228059 230548 1
5 70175 70227 1
6 89370 236886 1
7 89371 247658 1
8 89371 249558 1
9 89371 175997 1
g_data=G=nx.from_pandas_dataframe(x)
module 'networkx' has no attribute 'from_pandas_dataframe'
Run Code Online (Sandbox Code Playgroud)
我知道我错过了 …
networkx ×10
python ×9
graph-theory ×2
flask ×1
graph ×1
gunicorn ×1
igraph ×1
image ×1
json ×1
pandas ×1
pygraphviz ×1
python-2.7 ×1