图形学:如何使用列中的值为节点着色

Graphistry: how to color nodes using values from a column

我有一个包含列的数据框

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 条边。 我正在使用 Graphistry 创建网络。一切都很好:我正在使用 Jupiter notebook 来处理它。

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)