如何为具有嵌套节点的嵌套数据绘制 networkx MultiGraph,嵌套节点的大小作为字典中的值?
How to draw a networkx MultiGraph for nested data that has nested nodes with sizes as values in the dict?
我正在尝试显示 2 个未连接的图表,它们表示数据如下 -
demo_data = {"TOPIC1": {"SIZE": 50,
"WORDS": {"cat": 20, "dog": 30}},
"TOPIC2": {"SIZE": 25,
"WORDS": {"bat": 4, "rat": 9}}}
从我控制它的方式的意义上说,数据是灵活的 nested/looks。主要思想是能够显示如下图 -
有 2 个主要节点 - Topic1
和 Topic2
,它们的大小分别为 50 和 25。
Topic1 是 connected/surrounded by Cat
个大小为 20 的节点和 Dog
个大小为 30 的节点。
Topic2
同样如此。 Topic1
和 Topic2
没有连接 - 但这是灵活的。
如果数据的不同表示更适合它,那也行。
我如何根据给定数据制作图表?
到目前为止我尝试过的是 -
import networkx as nx
demo_data = {"TOPIC1": {"SIZE": 500, "WORDS": {"cat": 1, "dog": 300}}, "TOPIC2": {"SIZE": 25, "WORDS": {"bat": 50, "rat": 90}}}
G = nx.MultiGraph()
G.add_nodes_from(demo_data.keys())
G.add_nodes_from(demo_data['TOPIC1']['WORDS'], node_size=demo_data['TOPIC1']['WORDS'].values())
G.add_nodes_from(demo_data['TOPIC2']['WORDS'], node_size=demo_data['TOPIC2']['WORDS'].values())
nx.draw(G,with_labels=True)
但是节点大小不起作用,位置也不符合我的要求。也很难弄清楚如何以编程方式在现有节点之间添加边。
您提供的node_size
是节点本身的一个属性。它不会影响它的绘制方式。
绘制节点的大小需要作为list
在nx.draw
函数中传递。默认节点大小为 300
.
这样做的一种方法是这样的:
demo_data = {"TOPIC1": {"SIZE": 50,
"WORDS": {"cat": 20, "dog": 30}},
"TOPIC2": {"SIZE": 25,
"WORDS": {"bat": 4, "rat": 9}}}
for key in demo_data.keys():
G.add_node(key, size=demo_data[key]["SIZE"] * 10)
for animal, size in demo_data[key]["WORDS"].items():
G.add_node(animal, size=size*10)
G.add_edge(animal, key)
我正在尝试显示 2 个未连接的图表,它们表示数据如下 -
demo_data = {"TOPIC1": {"SIZE": 50,
"WORDS": {"cat": 20, "dog": 30}},
"TOPIC2": {"SIZE": 25,
"WORDS": {"bat": 4, "rat": 9}}}
从我控制它的方式的意义上说,数据是灵活的 nested/looks。主要思想是能够显示如下图 -
有 2 个主要节点 - Topic1
和 Topic2
,它们的大小分别为 50 和 25。
Topic1 是 connected/surrounded by Cat
个大小为 20 的节点和 Dog
个大小为 30 的节点。
Topic2
同样如此。 Topic1
和 Topic2
没有连接 - 但这是灵活的。
我如何根据给定数据制作图表? 到目前为止我尝试过的是 -
import networkx as nx
demo_data = {"TOPIC1": {"SIZE": 500, "WORDS": {"cat": 1, "dog": 300}}, "TOPIC2": {"SIZE": 25, "WORDS": {"bat": 50, "rat": 90}}}
G = nx.MultiGraph()
G.add_nodes_from(demo_data.keys())
G.add_nodes_from(demo_data['TOPIC1']['WORDS'], node_size=demo_data['TOPIC1']['WORDS'].values())
G.add_nodes_from(demo_data['TOPIC2']['WORDS'], node_size=demo_data['TOPIC2']['WORDS'].values())
nx.draw(G,with_labels=True)
但是节点大小不起作用,位置也不符合我的要求。也很难弄清楚如何以编程方式在现有节点之间添加边。
您提供的node_size
是节点本身的一个属性。它不会影响它的绘制方式。
绘制节点的大小需要作为list
在nx.draw
函数中传递。默认节点大小为 300
.
这样做的一种方法是这样的:
demo_data = {"TOPIC1": {"SIZE": 50,
"WORDS": {"cat": 20, "dog": 30}},
"TOPIC2": {"SIZE": 25,
"WORDS": {"bat": 4, "rat": 9}}}
for key in demo_data.keys():
G.add_node(key, size=demo_data[key]["SIZE"] * 10)
for animal, size in demo_data[key]["WORDS"].items():
G.add_node(animal, size=size*10)
G.add_edge(animal, key)