简体   繁体   English

networkx: Plot 具有公共属性的图

[英]networkx : Plot a graph with common attributes

I am trying to create a graph with nodes and edges.我正在尝试创建一个带有节点和边的图。 The data I had was divided into Members and topics taken by them.我掌握的数据分为成员和他们采取的主题。 Now I processed the data in this form where for each topic i have found the members who take that topic:现在我以这种形式处理数据,对于每个主题,我都找到了参与该主题的成员:

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

How can I join these member nodes to that topic?如何将这些成员节点加入该主题? Also if i have responses for each member like "Yes", "No", how can i use them as weights?另外,如果我对每个成员都有响应,例如“是”、“否”,我该如何将它们用作权重?

The nodes and edges are like dictionaries which can hold any sort of information you want.节点和边就像字典,可以保存您想要的任何类型的信息。 For example, you can label each node whether it's a topic or member and when it's time to plot, you can define its label, size, color, font size, etc based on that information.例如,您可以 label 每个节点,无论它是主题还是成员,以及何时到 plot,您可以根据该信息定义其 label、大小、颜色、字体大小等。

Here is a basic example where you change the color of each edge based on the member's response, instead of its thickness or some other attribute.这是一个基本示例,您可以根据成员的响应更改每条边的颜色,而不是根据其厚度或其他属性。

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()

Output Output

1

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM