【问题标题】:Bokeh Different Hovers for source and target nodes源节点和目标节点的散景不同悬停
【发布时间】:2021-12-11 19:46:08
【问题描述】:

我用 df 的 Bokeh networkx 创建了一个网络图:

df = pd.DataFrame('source': [1,2,3], 'target': ['a', 'b', 'c], 'name': ['a1', 'b2', 'c3'])

来自source 列的源节点和来自target 列的目标节点

有什么办法可以显示

HoverTool(tooltips = [("SOURCE", "$source"), ("NAME", "$name")])

对于“源”节点和

HoverTool(tooltips = [("TARGET", "$target")])

对于目标节点?

我的代码如下:

import pandas as pd
from bokeh.io import show
import networkx as nx
from bokeh.models import Plot, MultiLine, Circle
from bokeh.models.graphs import from_networkx
net_graph = networkx.from_pandas_edgelist(df, 'source', 'target', 'name')
for index, row in df.iterrows():
    net_graph.nodes[row['source']]['source_hover'] = row['source']
    net_graph.nodes[row['source']]['name hover'] = row['name']
    net_graph.nodes[row['target']]['target hover'] = row['target']
graph_plot = Plot(plot_width = 800, plot_height = 600, x_range = Range1d(-1.1, 1.1), y_range = Range1d(-1.1, 1.1))
graph_setup = from_networkx(net_graph, nx.spring_layout, scale = 1, center = (0, 0))
graph_plot.add_tools(HoverTool(renderers=[graph_setup], tooltips=[("SOURCE", "@source_hover"), ("NAME", "@name_hover")]))
graph_plot.add_tools(HoverTool(renderers=[graph_setup], tooltips=[("TARGET", "@target_hover")]))
graph_setup.node_renderer.glyph = Circle(size = 20, fill_color = 'red')
graph_setup.edge_renderer.glyph = MultiLine(line_color = "grey", line_alpha = 0.8, line_width = 1)
graph_plot.renderers.append(graph_setup)
show(graph_plot)

【问题讨论】:

    标签: python networkx bokeh


    【解决方案1】:

    您可以通过图表更改下面的渲染器,或者如果您有不同的字形,您可以添加 p、p2 等。我无法提供很好的帮助,因为您的意图不清楚,我们没有您的代码。

    p.add_tools(HoverTool(renderers=[], tooltips=[("SOURCE", "$source"), ("NAME", "$name")])
    p.add_tools(HoverTool(renderers=[], tooltips=[("TARGET", "$target")])
    

    renderers=[] 部分将帮助您做到这一点。渲染器基本上是您的线条/条等,因为上面有 Multiline(具有渲染器列表)和 Circle。所以基本上对于圆形图只需使用渲染器[]

    例如为圈子先给一个名字:

    circlename = Circle(size = 20, fill_color = 'red')
    

    并在悬停工具中添加renderers=[circlename]

    MultiLine 部分有点棘手。你有多行。所以你必须给他们所有人起名字。您基本上可以使用字典和 for 循环来命名。并且可以像上面那样确定渲染器部分。你可以从here查看它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-29
      • 2016-04-12
      • 1970-01-01
      • 1970-01-01
      • 2012-12-15
      • 2023-04-08
      • 2019-09-20
      • 2023-03-25
      相关资源
      最近更新 更多