matplotlib 在网络中绘制节点和边[复制]

zyfwsgd6  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(136)

此问题已在此处有答案

how to draw directed graphs using networkx in python?(6个回答)
上个月关门了。
我刚刚写了python 3.4代码,用于使用Networkx创建DAG(有向无环图)图。
问题是我无法从内部访问字典值:

nx.draw_networkx_nodes(dag,
                       pos,
                       node_color=[node[1]['color'] for node in dag.nodes(data=True)], 
                       node_shape=[node[1]['shape'] for node in dag.nodes(data=True)])

下面是我的代码:

import pandas as pd
import networkx as nx
import matplotlib.pyplot as plt

file_path = 'Demo.xlsx'

df = pd.read_excel(file_path)

dag = nx.DiGraph()

for col in treatment_columns:
    dag.add_node(col, label='Treatment', color='blue', shape='ellipse')

for col in confounder_columns:
    dag.add_node(col, label='Confounder', color='green', shape='rectangle')

dag.add_node(outcome_column, label='Outcome', color='red', shape='ellipse')

pos = nx.spring_layout(dag)

nx.draw_networkx_nodes(dag, pos, node_color=[node[1]['color'] for node in dag.nodes(data=True)], node_shape=[node[1]['shape'] for node in dag.nodes(data=True)])
nx.draw_networkx_labels(dag, pos, labels={node[0]: node[0] for node in dag.nodes(data=True)})
nx.draw_networkx_edges(dag, pos)

plt.axis('off')
plt.title("Causal DAG")
plt.show()
yftpprvb

yftpprvb1#

您面临的问题似乎与您如何尝试访问与Networkx DAG(有向无环图)中的节点关联的字典的值有关。
在你的代码中,你试图使用可能不正确的语法访问与节点关联的字典的值。你应该能够像这样获取与节点关联的字典的值:

node_colors = [data['color'] for node, data in dag.nodes(data=True)]
node_shapes = [data['shape'] for node, data in dag.nodes(data=True)]

nx.draw_networkx_nodes(dag, pos, node_color=node_colors, node_shape=node_shapes)

您需要分别使用data ['color']和data ['shape']从节点数据中提取'color'和'shape'的值。然后您可以将这些颜色和形状列表直接传递给nx.draw_networkx_nodes()函数。
请确保在代码中正确定义了treatment_columns、confounder_columns和outcome_column,并且DAG中的节点实际上具有与键“color”和“Shape”相关联的数据。如果没有,您需要确保在图形绘制中使用这些数据之前定义了这些数据。我希望这对您有所帮助。祝您愉快

相关问题