我有以下大熊猫日期框架:
df = pd.DataFrame({
'id_emp':[13524791000109, 12053850000137, 4707821000113],
'name_emp': [
'JL Consultores',
'GRAAL OURINHOS',
'SOJA COMERCIO DE DERIVADOS DE PETROLEO LTDA'
],
'name_dep': [
'DIONILSO MATEUS MARCON',
'JOSE AUGUSTO ROSA',
'LUCIO ANTONIO MOSQUINI'
],
'donnated_value': [ 750.00, 5000.00, 27350.00],
'donnated_amount': [1,1,1],
'reimbursed_value':[36000.00,410.55, 241.22],
'amount_reimbursed': [1,2,1],
'roi':[4800.00, 8.21,0.88]
})
在此数据框中,我用以下代码绘制了一个图形:
# Create graph
G = nx.Graph()
# Add id_emp nodes
G.add_nodes_from(df['id_emp'])
# Set 'name_emp' attribute for 'name_emp' column values
for node in G.nodes:
G.nodes[node]['name_emp'] = df.loc[df['id_emp'] == node]['name_emp'].values[0]
# Add name_dep nodes
G.add_nodes_from(df['name_dep'])
# Create the new column with transformed 'roi' values
df['roi_new'] = df['roi'].apply(
lambda x: 1 if x < 100 else 2 if 100 <= x < 1000 else 3)
# Add weighted edges
G.add_weighted_edges_from(df[['id_emp', 'name_dep', 'roi_new']].values)
我需要改善此图的可视化。为此,我希望df ['id_emp'和df ['name_dep']的节点采用不同的颜色和格式。此外,理想情况下,每种类型的节点都应位于不同的侧面。示例:df节点['id_emp]将保留在图的顶部,而其他节点将保留在图的底部。欢迎大家的帮助。
答案 0 :(得分:0)
'type_'
或id_emp
的所有节点添加一个name_dep
属性(替换现有代码行,不要添加它们!):# Add id_emp nodes
G.add_nodes_from(df['id_emp'], type_='id_emp')
...
# Add name_dep nodes
G.add_nodes_from(df['name_dep'], type_='name_dep')
colors
列表以进一步为节点着色:colors = ['#0000FF' if G.nodes[n]['type_'] == 'id_emp' else '#FF0000' for n in G.nodes]
pos
格以进一步定位节点(需要random
模块并返回不理想的结果;如果要更好地绘制节点/边缘,则需要更复杂的图形分析):pos = {
n: (
random.random(),
0 if G.nodes[n]['type_'] == 'id_emp' else 1
)
for n in G.nodes
}
nx.draw(
G,
pos=pos,
node_color=colors,
with_labels=True
)
您可以详细了解networkx
图表here。