Как я могу раскрасить узлы графа с помощью datashader? - PullRequest
1 голос
/ 16 апреля 2019

Я хочу визуализировать график с помощью 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)

Это работает, но так как мой график двудольный , я бы хотелзакрасить узлы sources и targets разными цветами, например, используя цветовую палитру, например:
my_colors_dict = {5: 'red', 3: 'blue', 1: 'blue', 2: 'blue', 4: 'blue'}
(т.е. все узлы синие, но мой единственный узел "5" в моем targets)

Как мне этого добиться?Я еще не очень знаком с библиотекой и могу придумывать неуклюжие попытки только пока ..

1 Ответ

1 голос
/ 16 апреля 2019

Вы должны быть в состоянии сделать это, назначив категорию каждому узлу, а затем сопоставив этот столбец с цветом, как описано в 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

...