2017-11-09 8 views
4

次のコードを使用して、インタラクティブなbokehネットワークグラフを作成しています。ボケプロットのノードにノードの名前を追加するにはどうすればよいですか?bokehネットワークプロットにノードラベルを追加

from bokeh.io import show, output_notebook 
from bokeh.models import Plot, Range1d, MultiLine, Circle, HoverTool, TapTool, BoxSelectTool 
from bokeh.models.graphs import from_networkx, NodesAndLinkedEdges, EdgesAndLinkedNodes 
from bokeh.palettes import Spectral4 
from bokeh.models import LabelSet 

plot = Plot(plot_width=900, plot_height=500, 
      x_range=Range1d(-1.1,1.1), y_range=Range1d(-1.1,1.1)) 
plot.title.text = "Graph Interaction Demonstration" 

plot.add_tools(HoverTool(tooltips=None), TapTool(), BoxSelectTool()) 

graph_renderer = from_networkx(G, nx.circular_layout, scale=1, center=(0,0)) 

graph_renderer.node_renderer.glyph = Circle(size=15, fill_color=Spectral4[0]) 
graph_renderer.node_renderer.selection_glyph = Circle(size=15, fill_color=Spectral4[2]) 
graph_renderer.node_renderer.hover_glyph = Circle(size=15, fill_color=Spectral4[1]) 
graph_renderer.node_renderer.glyph.properties_with_values() 
graph_renderer.edge_renderer.glyph = MultiLine(line_color="#CCCCCC", line_alpha=0.8, line_width=5) 
graph_renderer.edge_renderer.selection_glyph = MultiLine(line_color=Spectral4[2], line_width=5) 
graph_renderer.edge_renderer.hover_glyph = MultiLine(line_color=Spectral4[1], line_width=5) 

graph_renderer.selection_policy = NodesAndLinkedEdges() 
graph_renderer.inspection_policy = EdgesAndLinkedNodes() 

plot.renderers.append(graph_renderer) 

show(plot) 

得られたボケnetworkxグラフ:

enter image description here

答えて

1

話題!私はちょうどそれを持っていると思う。

  • 彼らはより多くのニシキヘビの方法かもしれないが、私がやったことは

    1. はnx.circular_layout(G)= POSを使用してグラフから位置を取得し、関連するラベル
    2. でデータソースを作成した私にこれらの位置を追加データソース
    3. が位置し、ソース

    レオナルドからLabelSetを作成し、あなたはGが作成される行が欠落しています。私はkarate_club_graphを取って、これは私のために働いています:

    from bokeh.models import ColumnDataSource 
    pos = nx.circular_layout(G) 
    x,y=zip(*pos.values()) 
    
    source = ColumnDataSource({'x':x,'y':y,'kid':['Joe %d' %ix for ix in range(len(x))]}) 
    labels = LabelSet(x='x', y='y', text='kid', source=source) 
    
    plot.renderers.append(labels) 
    
  • 1

    私はノードのためのインタラクティブラベルを意味すると思います。これを実現するには、数行変更する必要があります。

    hover = HoverTool(tooltips=[("Name:", "@name")]) 
    plot.add_tools(hover, TapTool(), BoxSelectTool(), WheelZoomTool()) 
    ... 
    graph_renderer.inspection_policy = NodesAndLinkedEdges() 
    

    を次にノードのデータソースを変更します。

    graph_renderer.node_renderer.data_source.data['name'] = [name1, ... ,nameN] 
    

    (データ・ソースがすでに存在している。それだけのための辞書ですキーは「インデックス」、ノードの番号付きリストなので、名前のリストなど、同じ長さのリストを参照するキーを追加できます。これらのリストには '@key'でアクセスできます)

    +0

    ドキュメントに入れてください!本当にありがとう。 –

    関連する問題