我试图从一个大图中提取包含特定节点的所有连接节点的子图.
Networkx库中是否有解决方案?
[编辑]
我的图是DiGraph
[编辑]
简单地改写:
我想包含我的特定节点n_i个和与所有连接直接或间接地使用任何传入或outcoming边缘(由其它节点传递)的节点我的曲线图的一部分.
例:
>>> g = nx.DiGraph()
>>> g.add_path(['A','B','C',])
>>> g.add_path(['X','Y','Z',])
>>> g.edges()
[('A', 'B'), ('B', 'C'), ('Y', 'Z'), ('X', 'Y')]
Run Code Online (Sandbox Code Playgroud)
我想要的结果是:
>>> g2 = getSubGraph(g, 'B')
>>> g2.nodes()
['A', 'B', 'C']
>>> g2.edges()
[('A', 'B'), ('B', 'C')]
Run Code Online (Sandbox Code Playgroud) 我正在使用一个名为"incidence_matrix(G)"的python函数,它返回图的事件矩阵.它来自Networkx包.我面临的问题是这个函数的返回类型是"Scipy Sparse Matrix".我需要使用numpy矩阵或数组格式的Incident矩阵.我想知道是否有任何简单的方法可以做到这一点?或者是否有任何内置函数可以为我做这个转换?
谢谢
I am calculating triad census as follows for my undirected network.
import networkx as nx
G = nx.Graph()
G.add_edges_from(
[('A', 'B'), ('A', 'C'), ('D', 'B'), ('E', 'C'), ('E', 'F'),
('B', 'H'), ('B', 'G'), ('B', 'F'), ('C', 'G')])
from itertools import combinations
#print(len(list(combinations(G.nodes, 3))))
triad_class = {}
for nodes in combinations(G.nodes, 3):
n_edges = G.subgraph(nodes).number_of_edges()
triad_class.setdefault(n_edges, []).append(nodes)
print(triad_class)
Run Code Online (Sandbox Code Playgroud)
It works fine with small networks. However, now I have a bigger network with approximately 4000-8000 nodes. When I try to run …
我正在尝试使用Python获取Neo4j图形数据库的节点数,但我没有找到任何方法或属性来做到这一点.
有人如何获得这些信息?
像NetworkX这样的其他Python软件包有一种获取此信息的方法.
>>> G = nx.Graph() # or DiGraph, MultiGraph, MultiDiGraph, etc
>>> G.add_path([0,1,2])
>>> len(G)
3
Run Code Online (Sandbox Code Playgroud) 当我绘制一个图形时matplotlib如何保存它而没有额外的边距?通常当我保存为
plt.savefig("figure.png") # or .pdf
Run Code Online (Sandbox Code Playgroud)
我得到了一些利润:
例:
import matplotlib.pyplot as plt
import networkx as nx
G=nx.Graph()
G.add_edge('a','b',weight=1)
G.add_edge('a','c',weight=1)
G.add_edge('a','d',weight=1)
G.add_edge('a','e',weight=1)
G.add_edge('a','f',weight=1)
G.add_edge('a','g',weight=1)
pos=nx.spring_layout(G)
nx.draw_networkx_nodes(G,pos,node_size=1200,node_shape='o',node_color='0.75')
nx.draw_networkx_edges(G,pos,
width=2,edge_color='b')
plt.axis('off')
plt.savefig("degree.png", bbox_inches="tight")
plt.show()
Run Code Online (Sandbox Code Playgroud)
更新2:
这些空间设置在轴内.如果我删除,这很清楚plt.axis('off')
所以我认为有一些技巧可以用于Networkx包.
我有以下问题:我在xUbuntu操作系统上,我试图在Flask应用程序中使用networkx,我有以下代码:
.....
import networkx as nx
......
# Creating and initializing graph object which is networkx object
hosts_graph = get_networkx_graph_object()
# Variable 'coord' where the coordinates for each node will be stored
coord = nx.pygraphviz_layout(hosts_graph, prog = 'dot')
Run Code Online (Sandbox Code Playgroud)
最后一行是411行.我收到以下错误:
File "/home/kiril/Documents/workfolder/omeganoc-sprint/onoc/omeganoc/grapher.py", line 411, in grouping_method
coord = nx.pygraphviz_layout(hosts_graph, prog = 'dot')
File "/usr/local/lib/python2.7/dist-packages/networkx-1.7-py2.7.egg/networkx/drawing/nx_agraph.py", line 264, in pygraphviz_layout
A.layout(prog=prog,args=args)
File "/usr/local/lib/python2.7/dist-packages/pygraphviz-1.1-py2.7-linux-x86_64.egg/pygraphviz/agraph.py", line 1301, in layout
data=self._run_prog(prog,' '.join([args,"-T",fmt]))
File "/usr/local/lib/python2.7/dist-packages/pygraphviz-1.1-py2.7-linux-x86_64.egg/pygraphviz/agraph.py", line 1248, in _run_prog
runprog=self._get_prog(prog)
File "/usr/local/lib/python2.7/dist-packages/pygraphviz-1.1-py2.7-linux-x86_64.egg/pygraphviz/agraph.py", line 1236, in _get_prog
raise …Run Code Online (Sandbox Code Playgroud) 我想在地图上绘制一个图形,其中节点将由坐标(纬度,长度)定义并且具有一些值相关联.
我已经能够将点绘制为底图上的散点图,但似乎无法找到如何在地图上绘制图形.
谢谢.
编辑:我添加了关于如何在底图上绘制点的代码.它的大部分是改编自代码在这个文章.
from mpl_toolkits.basemap import Basemap
from shapely.geometry import Point, MultiPoint
import pandas as pd
import matplotlib.pyplot as plt
m = Basemap(
projection='merc',
ellps = 'WGS84',
llcrnrlon=-130,
llcrnrlat=25,
urcrnrlon=-60,
urcrnrlat=50,
lat_ts=0,
resolution='i',
suppress_ticks=True)
# Create Point objects in map coordinates from dataframe lon
# and lat values
# I have a dataframe of coordinates
map_points = pd.Series(
[Point(m(mapped_x, mapped_y))
for mapped_x, mapped_y in zip(df['lon'],
df['lat'])])
amre_points = MultiPoint(list(map_points.values))
plt.clf()
fig = plt.figure()
ax = fig.add_subplot(111, …Run Code Online (Sandbox Code Playgroud) 我想从一个简单的Pandas DataFrame创建一些NetworkX图:
Loc 1 Loc 2 Loc 3 Loc 4 Loc 5 Loc 6 Loc 7
Foo 0 0 1 1 0 0 0
Bar 0 0 1 1 0 1 1
Baz 0 0 1 0 0 0 0
Bat 0 0 1 0 0 1 0
Quux 1 0 0 0 0 0 0
Run Code Online (Sandbox Code Playgroud)
哪里Foo…是指数,并Loc 1以Loc 7是列.但转换为Numpy矩阵或重新排列似乎不适用于生成输入nx.Graph().是否有实现这一目标的标准策略?我不反对重新格式化Pandas中的数据 - >转储到CSV - >导入到NetworkX,但似乎我应该能够从索引和值中的节点生成边缘.
我现在一直在与这个问题作斗争,我知道这很简单 - 但我对Python或NetworkX没什么经验.我的问题非常简单,我试图绘制一个大型数据集(大约200行/列)的矩阵,看起来像这样.第一行和第一列是相同的.
A,B,C,D,E,F,G,H,I,J,K
A,0,1,1,0,1,1,1,1,0,1,0
B,1,0,0,0,1,1,1,1,0,1,0
C,1,0,0,0,1,1,1,1,0,1,0
Run Code Online (Sandbox Code Playgroud)
它只是一个显示人们如何连接的矩阵,我想要的只是导入和绘制这个csv文件,并在NetworkX中使用它的相应标签.
我有这个文件(people.csv),并在这里查看以前的答案,似乎最好的方法是将数据放在一个numpy数组中.
这似乎有一个问题:
import numpy as np
import networkx as nx
import matplotlib.pyplot as plt
from numpy import genfromtxt
import numpy as np
mydata = genfromtxt('mouse.csv', delimiter=',')
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/lib/npyio.py", line 1272, in genfromtxt
fhd = iter(np.lib._datasource.open(fname, 'rbU'))
File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/lib/_datasource.py", line 145, in open
return ds.open(path, mode)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/lib/_datasource.py", line 472, in open
found = self._findfile(path)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/lib/_datasource.py", line 323, in _findfile
if self.exists(name):
File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/lib/_datasource.py", line 417, …Run Code Online (Sandbox Code Playgroud) 我想使用最新版本的 pyvis 和 python 版本 3.9.6 进行网络可视化:
from pyvis.network import Network
g = Network()
g.add_node(0)
g.add_node(1)
g.add_edge(0, 1)
g.show('test.html')
Run Code Online (Sandbox Code Playgroud)
每次执行时g.show()我都会收到此错误:
Traceback (most recent call last):
File "/Users/tom/Library/Mobile Documents/com~apple~CloudDocs/Projekte/Coding_/f1 standings/test2.py", line 3, in <module>
g.show('nx.html')
File "/Users/tom/Library/Python/3.9/lib/python/site-packages/pyvis/network.py", line 546, in show
self.write_html(name, open_browser=False,notebook=True)
File "/Users/tom/Library/Python/3.9/lib/python/site-packages/pyvis/network.py", line 515, in write_html
self.html = self.generate_html(notebook=notebook)
File "/Users/tom/Library/Python/3.9/lib/python/site-packages/pyvis/network.py", line 479, in generate_html
self.html = template.render(height=height,
AttributeError: 'NoneType' object has no attribute 'render'
Run Code Online (Sandbox Code Playgroud)
我尝试更新 pyvis,更改了代码中的各种详细信息,并导入了所有 pyvis.network,但没有任何结果。
networkx ×10
python ×10
numpy ×2
csv ×1
graph-theory ×1
graphviz ×1
matplotlib ×1
neo4j ×1
pandas ×1
pygraphviz ×1
python-3.x ×1
pyvis ×1
scipy ×1
xubuntu ×1