我有一个包含列的数据框架
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)