如何使用 holoviews 库绘制具有不同大小的顶点和边的图形?

How to draw graphs with vertices and edges of different sizes using the holoviews library?

如何绘制顶点和边大小不同的图形? 我正在使用 ipython 和 holoviews 库。

例如,

边缘输入

start,ends
1,4
2,4
3,5
3,6
2,6

节点输入

x,y,index,type
0.0,1.0,1,a
0.5,1.0,2,a
1.0,1.0,3,a
0.4,0.0,4,b
0.5,0.0,5,b
0.6,0.0,6,b

main.py

import numpy as np
import pandas as pd
import holoviews as hv
import networkx as nx
from holoviews.operation.datashader import datashade, bundle_graph

hv.extension('bokeh')

%opts Nodes Graph [width=800 height=200 xaxis=None yaxis=None]
%opts Graph (node_size=8 edge_line_width=0.5)

colors = ['#000000']+hv.Cycle('Category20').values

edges_df = pd.read_csv('edges.csv')
nodes = hv.Nodes(pd.read_csv('nodes.csv')).sort()

graph = hv.Graph((edges_df, nodes))
graph = graph.redim.range(x=(-0.05, 1.05), y=(-0.05, 1.05)).opts(style=dict(cmap=colors))

bundled = bundle_graph(graph)
bundled

输出

我试图修改这一行:

node_size=[3,4,5,8,3,8]
edge_size=[0.5,0.6,0.8,1.5,0.5]
%opts Graph (node_size=node_size edge_line_width=edge_size)

但是,这不起作用。

谁能帮帮我?如何创建不同大小的节点和边?

我用输入文件中的新列解决了节点大小问题。

x,y,index,type,size
0.0,1.0,1,a,8
0.5,1.0,2,a,10
1.0,1.0,3,a,20
0.4,0.0,4,b,8
0.5,0.0,5,b,3
0.6,0.0,6,b,15

之后,我在图表的选项中设置了列名

%opts Graph (node_size='size' edge_line_width=0.5)

但是,此策略不适用于边缘大小。

目前节点大小和边线宽度的缩放没有直接暴露(虽然很快就会),但是你可以直接修改数据源和字形来做这种事情。这是一个定义所谓的 finalize_hook 的示例,它将修改数据源和字形以让您定义两者的自定义缩放:

node_size=[3,4,5,8,3,8]
edge_size=[0.5,0.6,0.8,1.5,0.5]

def scale_sizes(plot, element):
    plot.handles['scatter_1_source'].data['node_size'] = node_size
    plot.handles['scatter_1_glyph'].size = 'node_size'

    plot.handles['multi_line_1_source'].data['edge_size'] = edge_size
    plot.handles['multi_line_1_glyph'].line_width = 'edge_size'

%opts Graph [finalize_hooks=[scale_sizes]]