2017-12-15 19 views
0

さまざまなサイズの頂点とエッジでグラフを描画するにはどうすればよいですか? 私はipythonとholoviewsライブラリを使用しています。例えば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) 

しかし、これが機能していません。

enter image description here

私はこの行を変更しようとしました。

誰でも手伝ってもらえますか?さまざまなサイズのノードとエッジを作成する方法は?

答えて

1

は、現在のノードのサイズのスケーリングと(それはすぐになりますが)、エッジの線幅が直接露出していない、しかし、あなたは直接、この種のものを行うには、データ・ソースとグリフを変更することができます。ここでは、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]] 
0

ノードサイズの問題を入力ファイルの新しい列に解決しました。

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) 

のオプションに列名をseted、後しかし、この戦略は、エッジの大きさのために動作しません。

enter image description here

関連する問題