标签: networkx

Python中的Networkx - 将节点属性绘制为节点外的标签

我有一个具有特定属性的节点图,我想在Python中通过networkx绘制图形,其中有几个属性作为节点外节点的标签.

有人可以帮助我如何编写我的代码来实现这一目标?

我的代码中有一个循环生成"interface_?" 防火墙列表中每个输入的属性(fwList)

for y in fwList:
    g.add_node(n, type='Firewall')
    print 'Firewall ' + str(n) + ' :' 
    for x in fwList[n]:
        g.node[n]['interface_'+str(i)] = x
        print 'Interface '+str(i)+' = '+g.node[n]['interface_'+str(i)]
        i+=1
    i=1
    n+=1
Run Code Online (Sandbox Code Playgroud)

然后,我稍后绘制节点和边缘,如:

pos=nx.spring_layout(g)
nx.draw_networkx_edges(g, pos)
nx.draw_networkx_nodes(g,pos,nodelist=[1,2,3],node_shape='d',node_color='red')
Run Code Online (Sandbox Code Playgroud)

并将稍后将其扩展到一些具有其他形状和颜色的新节点.

为了标记我在代码下面尝试的单个属性,但它没有用

labels=dict((n,d['interface_1']) for n,d in g.nodes(data=True))
Run Code Online (Sandbox Code Playgroud)

为了将文本放出节点,我不知道......

python networkx

11
推荐指数
3
解决办法
1万
查看次数

使用networkx的节点标签

我正在根据给定的Y值序列创建一个图形curveSeq.(X值自动枚举:0,1,2 ......)

即为curveSeq = [10,20,30],我的图表将包含点:

<0,10>, <1,20>, <2,30>.
Run Code Online (Sandbox Code Playgroud)

我正在绘制一系列图表nx.Graph,以便在一张图片中呈现所有内容.

我的问题是:

  • 每个节点都显示其位置.即位置中的节点<0,10>呈现其各自的标签,我不知道如何删除它.
  • 我想要添加标签的特定节点,但我不知道如何.

例如,对于序列:

[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1,1]
Run Code Online (Sandbox Code Playgroud)

收到的图表是:

图形

代码是:

for point in curveSeq:
                cur_point = point
                #assert len(cur_point) == 2
                if prev_point is not None:
                    # Calculate the distance between the nodes with the Pythagorean
                    # theorem
                    b = cur_point[1] - prev_point[1]
                    c = cur_point[0] - prev_point[0]
                    a = math.sqrt(b ** 2 + c ** 2)
                    G.add_edge(cur_point, prev_point, weight=a)
                G.add_node(cur_point)
                pos[cur_point] = cur_point
                prev_point = …
Run Code Online (Sandbox Code Playgroud)

python matplotlib networkx

11
推荐指数
1
解决办法
2万
查看次数

NetworkX最大的组件不再工作?

根据networkx文档,connected_component_subgraphs(G)返回所有组件的排序列表.因此,第一个应该是最大的组件.

但是,当我尝试使用文档页面上的示例代码获取图G的最大组件时

G=nx.path_graph(4)
G.add_edge(5,6)
H=nx.connected_component_subgraphs(G)[0]
Run Code Online (Sandbox Code Playgroud)

我明白了

TypeError: 'generator' object has no attribute '__getitem__'
Run Code Online (Sandbox Code Playgroud)

它曾经在我的另一台计算机上运行早期版本的networkx(1.7我想,不是100%肯定)

现在我使用的是另一台配备python 2.7.7和networkx 1.9的计算机.这是版本问题吗?

我自己编写了一个带有几行的小函数来找到最大的组件,只是想知道为什么会出现这个错误.

顺便说一句,我可以通过将生成器对象转换为列表来获取组件.

components = [comp for comp in nx.connected_components(G)]
Run Code Online (Sandbox Code Playgroud)

但是列表不按文档中所述的组件大小排序.

例:

G = nx.Graph()
G.add_edges_from([(1,2),(1,3),(4,5)])
G.add_nodes_from(range(6,20))
components = [comp for comp in nx.connected_components(G)]
component_size = [len(comp) for comp in components]
print G.number_of_nodes(), G.number_of_edges(), component_size

G = nx.Graph()
G.add_edges_from([(1000,2000),(1000,3000),(4000,5000)])
G.add_nodes_from(range(6,20))
components = [comp for comp in nx.connected_components(G)]
component_size = [len(comp) for comp in components]
print G.number_of_nodes(), G.number_of_edges(), component_size
Run Code Online (Sandbox Code Playgroud)

输出:

19 3 [3, 2, 1, …
Run Code Online (Sandbox Code Playgroud)

python networkx

11
推荐指数
2
解决办法
5022
查看次数

AttributeError: 模块“networkx”没有属性“connected_component_subgraphs”

B = nx.Graph()
B.add_nodes_from(data['movie'].unique(), bipartite=0, label='movie')
B.add_nodes_from(data['actor'].unique(), bipartite=1, label='actor')
B.add_edges_from(edges, label='acted')

A = list(nx.connected_component_subgraphs(B))[0]
Run Code Online (Sandbox Code Playgroud)

当我尝试使用 nx.connected_component_subgraphs(G) 时,我收到以下给定的错误。请帮助解决这个问题。

在数据集中有两个 couns(电影和演员),它是二部图的形式。

我想获得电影节点的连接组件。


----> 1 A = list(nx.connected_component_subgraphs(B))[0]中的AttributeError Traceback(最近一次调用)

AttributeError: 模块“networkx”没有属性“connected_component_subgraphs”

python error-handling networkx

11
推荐指数
2
解决办法
1万
查看次数

networkx 显示 random_state_index 不正确

我正在尝试用 networkx 和 Python 绘制简单的图形。

这是我的代码:

import networkx as nx
import matplotlib.pyplot as plt
G = nx.complete_graph(5)
nx.draw(G, with_labels=True, font_weight='bold')
plt.show()

Run Code Online (Sandbox Code Playgroud)

但我收到错误

Message=random_state_index is incorrect
Source=***\PythonTest.py
StackTrace:
File "***\PythonTest.py", line 15, in <module>
  nx.draw(G, with_labels=True)
Run Code Online (Sandbox Code Playgroud)

Python 3.7 64bit

OS Windows

networkx 2.2 ,2.3 或 2.5 也有同样的问题。

python networkx

11
推荐指数
2
解决办法
6859
查看次数

如何将网络中的图形加载到 PyTorch 几何图形并设置节点特征和标签?

目标:我正在尝试将网络中的图形导入 PyTorch 几何图形并设置标签和节点特征

(这是Python中的)

问题)

  1. 我该如何做到这一点[从networkx到PyTorch几何的转换]?(大概是通过使用该from_networkx功能)
  2. 如何传输节点特征和标签?(更重要的问题)

我看过一些其他/以前的帖子有这个问题,但他们没有得到回答(如果我错了,请纠正我)。

尝试:(我刚刚在下面使用了一个不切实际的例子,因为我无法在这里发布任何真实的内容)

让我们想象一下我们正在尝试在一组汽车上执行图形学习任务(例如节点分类)(正如我所说的不太现实)。也就是说,我们有一组汽车、一个邻接矩阵和一些特征(例如年底的价格)。我们想要预测节点标签(即汽车的品牌)。

我将使用以下邻接矩阵:(抱歉,不能使用乳胶来格式化它)

A = [(0, 1, 0, 1, 1), (1, 0, 1, 1, 0), (0, 1, 0, 0, 1), (1, 1, 0, 0, 0) , (1, 0, 1, 0, 0)]

这是代码(适用于 Google Colab 环境):

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import networkx as nx
from torch_geometric.utils.convert import to_networkx, from_networkx
import torch

!pip install torch-scatter torch-sparse torch-cluster …
Run Code Online (Sandbox Code Playgroud)

python networkx pytorch pytorch-geometric

11
推荐指数
1
解决办法
1万
查看次数

在networkx中的图形对象中查找单独的图形

我有一个巨大的图表数据集 - 让我们说它是这样的,但在更大的层面上:

1 -> 2
3 -> 4
Run Code Online (Sandbox Code Playgroud)

1,2,3,4是节点,箭头是有向边.假设它们都在一个图形对象中:

import networkx as nx
G = nx.DiGraph()
G.add_nodes_from([1,2,3,4])
G.add_edge(1,2)
G.add_edge(3,4)
Run Code Online (Sandbox Code Playgroud)

给定一个像这样的对象,它在图形中有两个迷你图形,我们如何拉出每个迷你图形?我觉得必须有这个词吗?我的最终结果如下:

for mini_graph in G:
    print mini_graph.nodes()

...
[1,2]
[3,4]
Run Code Online (Sandbox Code Playgroud)

python directed-graph networkx directed-acyclic-graphs

10
推荐指数
3
解决办法
5092
查看次数

如何使用networkx在图形中显示节点名称?

我有代码

import networkx as nx
import matplotlib.pyplot as plt

G = nx.DiGraph()

G.add_nodes_from([1, 2, 3, 4])
G.add_edges_from([(1, 2), (2, 1), (2, 3)])

nx.draw(G)
plt.savefig("graph.png")
plt.show()
Run Code Online (Sandbox Code Playgroud)

它绘制了以下图表: 在此输入图像描述

但是,我需要显示标签.如何在图形的节点内显示数值和单词(一,二,三和四)?

python graph matplotlib networkx

10
推荐指数
1
解决办法
9268
查看次数

与Networkx相比,Graph-tool的速度惊人地慢

在看了令人印象深刻的性能比较后,我决定尝试使用图形工具.因此,为了进行比较,我编写了代码以使用两个包生成随机树.

图形工具代码:

import numpy as np
import graph_tool.all as gt

# construct an initial graph with two nodes and one link
n = 5000
G = gt.Graph(directed = False)
G.add_edge(0, 1)

for t in range(2, n):
    # connect the new vertex to one of the old vertices randomly
    G.add_edge(np.random.choice(range(t)), t)
Run Code Online (Sandbox Code Playgroud)

Networkx代码:

import networkx as nx
import numpy as np

n = 5000
# initial graph
G = nx.Graph()
G.add_edge(0, 1)

for t in range(2, n):
    G.add_edge(t, np.random.choice(range(t)))
Run Code Online (Sandbox Code Playgroud)

图形工具在我的4核机器上大约需要14秒,而networkx在同一台机器上需要不到2秒!我错过了一些明显的东西吗 …

python networkx graph-tool

10
推荐指数
1
解决办法
4623
查看次数

使用 Networkx 连接 Pandas DataFrame 上的组件

操作 使用连通分量基于距离和标签对点进行聚类。

问题 NetworkX 节点存储属性和 Pandas DataFrame 之间的来回切换

  • 看起来太复杂
  • 查找节点时的索引/键错误

尝试 使用不同的函数,如 Scikit NearestNeighbours,但导致数据的来回移动相同。

问题 是否有更简单的方法来执行此连接组件操作?

例子

import numpy as np
import pandas as pd
import dask.dataframe as dd
import networkx as nx
from scipy import spatial

#generate example dataframe
pdf = pd.DataFrame({'x':[1.0,2.0,3.0,4.0,5.0],
                    'y':[1.0,2.0,3.0,4.0,5.0], 
                    'z':[1.0,2.0,3.0,4.0,5.0], 
                    'label':[1,2,1,2,1]}, 
                   index=[1, 2, 3, 4, 5])
df = dd.from_pandas(pdf, npartitions = 2)

object_id = 0
def cluster(df, object_id=object_id):
    # create kdtree
    tree = spatial.cKDTree(df[['x', 'y', 'z']])

    # get neighbours within distance for every point, store …
Run Code Online (Sandbox Code Playgroud)

kdtree scipy networkx pandas connected-components

10
推荐指数
1
解决办法
1160
查看次数