Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用networkx为每个类别指定特定的自定义节点颜色以可视化?_Python_Colors_Networkx - Fatal编程技术网

Python 如何使用networkx为每个类别指定特定的自定义节点颜色以可视化?

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

我有一个pandas数据集,其中有一列指定给它的组。但是我想自定义节点的颜色。例如,对于组0,节点为红色,对于组1,节点为蓝色。这是我在研究的基础上尝试的,但由于某些原因,它并没有真正遵循分组(根据分组应该只有两种颜色),我无法编辑颜色

这是保存在sample.csv文件中的我的数据集

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)