Python 如何使用networkx为每个类别指定特定的自定义节点颜色以可视化?
我有一个pandas数据集,其中有一列指定给它的组。但是我想自定义节点的颜色。例如,对于组0,节点为红色,对于组1,节点为蓝色。这是我在研究的基础上尝试的,但由于某些原因,它并没有真正遵循分组(根据分组应该只有两种颜色),我无法编辑颜色 这是保存在sample.csv文件中的我的数据集Python 如何使用networkx为每个类别指定特定的自定义节点颜色以可视化?,python,colors,networkx,Python,Colors,Networkx,我有一个pandas数据集,其中有一列指定给它的组。但是我想自定义节点的颜色。例如,对于组0,节点为红色,对于组1,节点为蓝色。这是我在研究的基础上尝试的,但由于某些原因,它并没有真正遵循分组(根据分组应该只有两种颜色),我无法编辑颜色 这是保存在sample.csv文件中的我的数据集 ID|Parent|Group| 1 | 5 | 0 | 2 | 5 | 0 | 3 | 4 | 1 | 4 | 5 | 1 | 5 | 3 | 0 | sam
ID|Parent|Group|
1 | 5 | 0 |
2 | 5 | 0 |
3 | 4 | 1 |
4 | 5 | 1 |
5 | 3 | 0 |
sample= pd.read_csv('sample.csv', encoding='cp1252')
G=nx.from_pandas_edgelist(sample, 'ID', 'Parent', create_using=nx.DiGraph())
carac=sample.set_index('ID')
carac=sample.reindex(G.nodes())
carac['Group']=pd.Categorical(carac['Group'])
carac['Group'].cat.codes
plt.figure(2,figsize=(5,5))
nx.draw(G, node_color=carac['Group'].cat.codes, cmap=plt.cm.Set1, node_size=150)
后果
更新:我也尝试过这个,但它也没有遵循颜色分组
不是用于节点组,而是用于每个节点本身。您应该将图形中每个节点的颜色添加到颜色中:
node_颜色(颜色字符串或浮点数组,(默认值='#1f78b4'))–节点颜色。可以是单色格式字符串,也可以是与节点列表长度相同的颜色序列。如果指定了数值,则将使用cmap和vmin、vmax参数将其映射到颜色。有关更多详细信息,请参见matplotlib.scatter。
还要注意,您的颜色
数组长度必须等于G.节点的长度
!如果它们不同,node\u color
将被忽略强>
G = nx.gnm_random_graph(20, 50, directed=True)
# Because of .pop(), the length of colors is different
colors = ['red' if n > 10 else 'blue' for n in G.nodes].pop()
nx.draw(G, with_labels=False, node_size=150, node_color=colors)
感谢您的回答,我如何检查样本['Group']的值是0还是1?我尝试了颜色=['red'(如果G.nodes中的样本['Group']>0,则为[G.nodes中的样本['Group']]使用颜色=['red'”)>0,如果G.nodes中的样本['Group']使用颜色,则为“blue”],但它显示了一个错误:对于G.nodes中的样本['Group'],序列的真值是不明确的。如果sample['Group'][G.nodes[n]['ID']]>0,则应使用类似于:colors=['red',否则G.nodes中n的颜色为'blue',
for语句使用变量作为索引。如果使用sample['Group']
,您将得到一个错误n将对节点进行迭代G.nodes[n]['ID']
将为每个节点获取一个ID。然后您应该根据此ID提取组。我不确定sample['group'][G.nodes[n]['ID']]]
是否可以工作,但正确的代码与此非常相似。我尝试过此方法,但出于某种原因,它显示了一个关键错误:“ID'尝试此方法:如果int(sample.loc[df['ID']==n]['group'])==0,如果int(sample.loc df['ID']=n]['group'])=0,则G.nodes中的n为“蓝色”]
G = nx.gnm_random_graph(20, 50, directed=True)
# Not for groups, but for each node
colors = ['red' if n > 10 else 'blue' for n in G.nodes]
nx.draw(G, with_labels=False, node_size=150, node_color=colors)
G = nx.gnm_random_graph(20, 50, directed=True)
# Because of .pop(), the length of colors is different
colors = ['red' if n > 10 else 'blue' for n in G.nodes].pop()
nx.draw(G, with_labels=False, node_size=150, node_color=colors)