graphhistry:如何使用列中的值为节点上色



我有一个包含列的数据框架

Source      Target     Label_S  Weight
car         airplane     0.5       0.2
car         train        0.5       0.5
car         bike         0.5       0.2
bike        motorbike    1       0.7
bike        car          1       0.2
airplane    car          -1      0.2
train       car          1       0.5
motorbike   car          1       0.7

只是举个例子。Label_S是与源关联的标签。大约有30000个节点和58000条边。我正在使用图形学来创建网络。一切都很好:我正在使用木星笔记本电脑工作。

import graphistry
graphistry.register(api=3, protocol="https", server="hub.graphistry.com", username="", password="")   
g = graphistry.bind(source="Source", destination="Target")
g.edges(net).plot(as_files=False)

我想根据它们的标签(dtype=float64)为节点分配颜色。映射应该是:

-1.0:   red
0.5:    black
1:    yellow
2:    blue

表示所有其他橙色。另外,如果可能的话,我想根据两个节点之间的标签颜色的梯度给它们的边缘上色。

遵循在线手册,我首先尝试使用astype(str)将标签值从float64转换为对象后,按如下方式为节点上色:

g2 = (g
.nodes(net, 'Source')
.encode_point_color('Source', categorical_mapping={
'-1.0': 'red',
'0.5': 'black',
'1.0': 'yellow'

}, default_mapping='orange')

当我运行代码g2.edges(df).plot(as_files=False)时,没有任何变化:颜色是默认的,而不是根据我的设置。

你知道如何从Jupyter Notebook中着色节点和边缘吗?我有一个免费的计划。

这里的问题是您使用了错误的函数encode_point_color:

.encode_point_color('Source', categorical_mapping={

你需要使用列的值,这里我想象它是Label_S:

import pandas as pd
dict_val = [
{'Source': 'car', 'Target': 'airplane', 'Label_S': 0.5, 'Source': 0.2},
{'Source': 'car', 'Target': 'train', 'Label_S': 0.5, 'Source': 0.5}
]
net = pd.DataFrame.from_dict(dict_val)
g2 = (g
.nodes(net, 'Source')
.encode_point_color('Label_S', categorical_mapping={
-1.0: 'red',
0.5: 'black',
1.0: 'yellow'
}, default_mapping='orange'))
g2.edges(net).plot(as_files=False)

最新更新