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

标签 python bokeh holoviews datashader

我想使用 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: '红色', 3: '蓝色', 1: '蓝色', 2: '蓝色', 4: '蓝色'}
(即所有节点都是蓝色的,但我的目标中的单个节点“5”)

我怎样才能实现这个目标?我对这个库还不是很熟悉,到目前为止只能做出笨拙的尝试..

最佳答案

您应该能够通过为每个节点分配一个类别,然后将该列映射到颜色来实现此目的,如 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

关于python - 如何使用 datashader 为图表的节点着色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55708721/

相关文章:

python - 在元组上调用元组时的元组身份

python - Pandas 系列出现 'Data must be 1-dimensional' 错误

python - 使用 PyObjC 以正常方式打印 python 异常

python - Bokeh 或 Plotly 中的极坐标图

sorting - 根据相似性度量(例如余弦相似性等)对 Holoviews 热图的列和行重新排序

python - Django 休息框架只创建序列化程序字段

python - Bokeh 应用程序中的 throttle

python - 自版本 2.0.0 以来 Bokeh 图损坏

python - 运行 Holoview 和弦图示例时出错

python - 如何使用 holoviews 和 Tornado python 制作流图