此问题已在此处有答案:
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()
1条答案
按热度按时间yftpprvb1#
您面临的问题似乎与您如何尝试访问与Networkx DAG(有向无环图)中的节点关联的字典的值有关。
在你的代码中,你试图使用可能不正确的语法访问与节点关联的字典的值。你应该能够像这样获取与节点关联的字典的值:
您需要分别使用data ['color']和data ['shape']从节点数据中提取'color'和'shape'的值。然后您可以将这些颜色和形状列表直接传递给nx.draw_networkx_nodes()函数。
请确保在代码中正确定义了treatment_columns、confounder_columns和outcome_column,并且DAG中的节点实际上具有与键“color”和“Shape”相关联的数据。如果没有,您需要确保在图形绘制中使用这些数据之前定义了这些数据。我希望这对您有所帮助。祝您愉快