如何使用数据着色器为图形的节点着色?
How can I color nodes of a graph, with 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,我想用不同的颜色为 sources
和 targets
节点着色,例如使用像这样的调色板:
my_colors_dict = {5: 'red', 3: 'blue', 1: 'blue', 2: 'blue', 4: 'blue'}
(即所有节点都是蓝色的,但我的 targets
中的单个节点“5”)
我怎样才能做到这一点?我对图书馆还不是很熟悉,到目前为止只能想出笨拙的尝试..
您应该能够通过为每个节点分配一个类别,然后将该列映射到一种颜色来完成此操作,如 http://holoviews.org/user_guide/Style_Mapping.html 中所述。但是如果你不想改变你的数据结构并且不介意有点 hackish,你总是可以通过覆盖一个重新着色的节点子集来做到这一点:
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')
我想用数据着色器可视化一个图形(我有很多节点),如
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,我想用不同的颜色为 sources
和 targets
节点着色,例如使用像这样的调色板:
my_colors_dict = {5: 'red', 3: 'blue', 1: 'blue', 2: 'blue', 4: 'blue'}
(即所有节点都是蓝色的,但我的 targets
中的单个节点“5”)
我怎样才能做到这一点?我对图书馆还不是很熟悉,到目前为止只能想出笨拙的尝试..
您应该能够通过为每个节点分配一个类别,然后将该列映射到一种颜色来完成此操作,如 http://holoviews.org/user_guide/Style_Mapping.html 中所述。但是如果你不想改变你的数据结构并且不介意有点 hackish,你总是可以通过覆盖一个重新着色的节点子集来做到这一点:
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')