如何使用datashader为图的节点着色?

2024-04-24 22:26:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用datashader可视化一个图(我有很多节点),如

import holoviews as hv
import pandas as pd
import dask.dataframe as dd
from holoviews.operation.datashader import (
    datashade, aggregate, dynspread,
    bundle_graph, split_dataframe, regrid
)
from holoviews.element.graphs import layout_nodes
from datashader.layout import random_layout

hv.extension('bokeh')

sources = [3, 1, 2, 3, 4]
targets = [5, 5, 5, 5, 5]
df = pd.DataFrame({'source': sources, 'target': targets})
edges_df = dd.from_pandas(df, npartitions=3)

graph = layout_nodes(hv.Graph(edges_df), layout=random_layout)
pad = dict(x=(-.5, 1.3), y=(-.5, 1.3))
datashade(graph, width=800, height=800) * graph.nodes.redim.range(**pad)

这是可行的,但是由于我的图形是bipartite,我想用不同的颜色来给sourcestargets节点上色,例如使用如下调色板:
my_colors_dict = {5: 'red', 3: 'blue', 1: 'blue', 2: 'blue', 4: 'blue'}
(即,除我的targets中的单个节点“5”外,所有节点均为蓝色)

我怎样才能做到这一点?我对图书馆还不是很熟悉,到目前为止,我只能做出笨拙的尝试。。你知道吗


Tags: fromimportpandasdf节点asbluegraph
1条回答
网友
1楼 · 发布于 2024-04-24 22:26:51

您应该能够通过为每个节点分配一个类别,然后将该列映射到http://holoviews.org/user_guide/Style_Mapping.html中描述的颜色来实现这一点。但是,如果您不想更改数据结构,也不介意有点老土,则可以通过覆盖重新存储的节点子集来实现:

targets = graph.nodes.clone()
targets.data = graph.nodes.data[4:]

datashade(graph, width=800, height=800) * graph.nodes.redim.range(**pad) * targets.opts(color='red')

enter image description here

相关问题 更多 >