簡體   English   中英

如何使用數據着色器為圖形的節點着色?

[英]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)

這是有效的,但由於我的圖形是二分的,我想用不同的顏色為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')

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM