【问题标题】:Hover ToolTip Not Working for Bokeh visualization of Networkx Graph悬停工具提示不适用于 Networkx Graph 的散景可视化
【发布时间】:2019-05-31 04:05:12
【问题描述】:

我正在尝试使用 Networkx 制作图表并使用 Bokeh 渲染图表。除了我咨询过Data tooltips in Bokeh don't show data, showing '???' insteadBokeh hover tooltip not displaying all data - Ipython notebook 并阅读有关 ColumnDataSource 的文档的悬停工具提示之外,一切似乎都在工作,但我仍然无法弄清楚为什么工具提示不会从其中一列中呈现标签我的数据框。

下面是一个过度简化的 Excel 文件中的数据,我一直在玩。

group    subtopic    code
fruit    grapes      110A
fruit    apple       110B
meat     pork        220A
meat     chicken     220B
meat     duck        220C
vegetable lettuce    300A
vegetable tomato     310A
vegetable asparagus  320A

我尝试运行以下代码:

df = pd.read_excel(file1, sheetname = 'Sheet3')

reshape = []

for i, j, in df.iterrows():
    for _, k in df.iterrows():
        if (j['code'] == k['code']):
            pass
        elif j['group'] == 'nan':
            reshape.append({'code1':j['code'],
                       'code2': j['code'],
                       'group': 'None'})
        elif (j['group'] == k['group']):
            reshape.append({'code1': j['code'],
                       'code2': k['code'],
                       'group': j['group']})
        else:
            pass
df1 = pd.DataFrame(reshape)

g = nx.from_pandas_edgelist(df1, source='code1', target='code2', edge_attr = True)


source = ColumnDataSource(df)

TOOLTIPS = [("type", "@group"),("code", "@code1")]

plot = Plot(x_range = Range1d(-1.1,1.1), y_range = Range1d(-1.1,1.1))
plot.title.text = 'Bokeh Plot'

plot.add_tools(HoverTool(tooltips = TOOLTIPS), TapTool(), BoxSelectTool(), 
 WheelZoomTool())

graph_renderer = from_networkx(g, nx.spring_layout, scale = 1, center = (0,0))

# manipulating nodes
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])

# manipulating edges
graph_renderer.edge_renderer.glyph = MultiLine(line_color = '#CCCCCC', line_alpha = 
 .5, 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)

output_notebook()
show(plot)

运行脚本后,我得到以下信息:

组列标签正确显示,但不是副主题。我会很感激任何想法或指示。

【问题讨论】:

  • 散景是什么版本?
  • 我正在运行 1.0.3

标签: pandas graph networkx bokeh


【解决方案1】:

您正在创建一个ColumnDataSource,但实际上并没有将它用于任何事情。 CDS 仅仅因为已创建而没有任何影响,它必须配置为驱动字形或表格等。悬停工具使用字形已配置的数据源,在本例中由 from_networkx 设置.您可以访问节点渲染器的数据源,以添加您想要的任何其他列(例如,用于悬停工具):

graph_renderer.node_renderer.data_source.data['code1'] = # your data here

【讨论】:

  • 知道了!我想我现在明白了。 graph_rendered.node_renderer.data_source.data 是一个带有条目“索引”的字典,其中包含来自我的 networkx 对象 g 的节点名称列表。所以真的在我的工具提示中,以下可能有效 TOOLTIPS = [('code', '@index')] 就像你说的,如果我想在悬停时显示附加值,我会根据需要使用添加值到 dict .
  • @imstuck 你的评论正是我想学习的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
  • 2015-05-07
  • 1970-01-01
  • 2023-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多