networkx:使用公共属性绘制图形

2024-10-01 15:42:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个带有节点和边的图。我得到的数据被分为成员和他们采取的主题。现在,我以这种形式处理了数据,对于每个主题,我找到了参与该主题的成员:

T498    ['M1', 'M3', 'M5', 'M7', 'M16', 'M20']                  
T611    ['M2', 'M3', 'M4', 'M6', 'M7', 'M8', 'M9', 'M10', 'M11', 'M12', 'M13', 'M14', 'M15', 'M17', 'M18', 'M19']

如何将这些成员节点连接到该主题? 此外,如果我对每个成员都有回答,如“是”、“否”,我如何使用它们作为权重


Tags: 数据主题节点成员形式m3m5m4
1条回答
网友
1楼 · 发布于 2024-10-01 15:42:34

节点和边就像字典一样,可以保存您想要的任何类型的信息。例如,您可以标记每个节点,无论它是主题还是成员,并且在绘图时,您可以基于该信息定义其标签、大小、颜色、字体大小等

下面是一个基本示例,您可以根据成员的响应而不是其厚度或其他属性更改每条边的颜色

import matplotlib.pyplot as plt
import networkx as nx

topics = {
    'T498': [('M1', 0), ('M3', 1), ('M5', 1), ('M7', 0), ('M8', 0)],
    'T611': [('M2', 1), ('M3', 1), ('M4', 0), ('M6', 1), ('M7', 0)],
}

G = nx.Graph()
for topic, members in topics.items():
    # You just need `G.add_node(node)`, everything else after that is an attribute
    G.add_node(topic, type='topic')
    for member, response in members:
        if member not in G.nodes:
            G.add_node(member, type='member')
        # `G.add_edge(node1, node2)`, the rest are attributes
        G.add_edge(topic, member, response=response)

node_sizes = [1000 if attrs['type'] == 'topic' else 500 for attrs in G.nodes.values()]
node_colors = ['r' if attrs['type'] == 'topic' else '#1f78b4' for attrs in G.nodes.values()]
edge_colors = ['y' if attrs['response'] else 'k' for attrs in G.edges.values()]
pos = nx.spring_layout(G)
nx.draw_networkx_labels(G, pos)
nx.draw(G, pos, node_size=node_sizes, node_color=node_colors, edge_color=edge_colors)
plt.show()

输出

1

相关问题 更多 >

    热门问题