图形学:如何使用列中的值为节点着色
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)
我有一个包含列的数据框
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)