NetworkX DiGraph 边缘具有基于其初始节点的特定

Posted

技术标签:

【中文标题】NetworkX DiGraph 边缘具有基于其初始节点的特定【英文标题】:NetworkX DiGraph Edges with a specific on a based on their initial node 【发布时间】:2021-09-27 03:18:17 【问题描述】:

我用 networkx 完成了一个图表,用于可视化 CSV 文件中的关系,该文件大约 500 行长。为了提高可视化效果,我尝试为特定边缘着色。

理想情况下只有着色:(any to A), (any to B), (A to any), (B to any)。

大约有 140 个边缘,所以我不能手动给它们上色。

我尝试遍历 graph.edges 并创建一个列表,如 这是 nx.draw 期望收到的,但没有成功。

我已经设法用不同的颜色为所有边缘着色,但我需要为某些边缘设置特定的颜色。

这就是我现在所拥有的(简化)

用不同的颜色为每条边上色

这就是我想要的

有什么建议吗?

非常感谢:)

CSV:

from;to
A;G
B;A
C;A
D;S
V;A
V;S
V;A
M;S
M;A
...

graph.edges:

[('A', 'C'), ('A', 'D'), ('A', 'F'),

代码:

# Read the CSV file
df = pd.read_csv("test.csv", sep=";")

# Create the directed graph
graph = nx.from_pandas_edgelist(df, source="from", target="to", create_using=nx.DiGraph()) 

# Create dummy weight and assign a color
d=dict(graph.edges)
count=graph.number_of_edges()
print(count)
values = range(count)

# Plot
plt.figure(figsize=(12,12), dpi=120)
pos = nx.shell_layout(graph, scale=8)
nx.draw(graph, pos=pos, node_size=600,node_color='lightblue', edge_color=edge_colors, linewidths=0.05, font_size=6,with_labels=True ) #font_weight='bold', ,
plt.show()

【问题讨论】:

【参考方案1】:
edge_colors = [0 for edge in graph.edges()]
edge_map = [
    ((0, 'A'), 1),
    ((0, 'B'), 2),
    ((1, 'A'), 3),
    ((1, 'B'), 4)
            ]

for idx, edge in enumerate(graph.edges()):
    for node, color in edge_map:
        if edge[node[0]] == node[1]:
            edge_colors[idx] = color

edge_colors

给予

[1, 3, 3, 0, 3, 0, 0, 3]

其中,当传递给您的 nx.draw() 调用时,情节:

我将把它作为练习留给读者使用nx.draw()cmap 关键字参数或更改edge_map 列表中的文字值来更改颜色。

【讨论】:

以上是关于NetworkX DiGraph 边缘具有基于其初始节点的特定的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的所有边在 networkx DiGraph 中都被分配了相同的值?

Python networkx:边缘收缩

使用networkX输出树形结构

networkx 笔记:pagerank

Networkx 图形 python

如何使用networkx在图中显示节点名称? [复制]