pandas - 悬停工具提示不适用于 Networkx Graph 的 Bokeh 可视化

标签 pandas graph networkx bokeh

我正在尝试使用 Networkx 制作图表并使用 Bokeh 渲染图表。除了我咨询过的悬停工具提示 Data tooltips in Bokeh don't show data, showing '???' instead 之外,一切似乎都正常。 , Bokeh 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)

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

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

最佳答案

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

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

关于pandas - 悬停工具提示不适用于 Networkx Graph 的 Bokeh 可视化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54041393/

相关文章:

python - 如何计算Python中groupby日期的平均值

python - 使用条件在 python pandas 中进行内部连接

Facebook 社交网络分析我页面的评论/分享/喜欢

python - Spring 图形布局,在 networkx 中具有一些预定义的位置

python - networkx 反向函数的开销?

python - 将不同的聚合应用于 pandas GroupBy 组

python - Django 模板中的 Loop Pandas 表

javascript - 图形上两点之间的标记/突出显示范围

java - 图着色算法 : typical scheduling problem

python - 在 NetworkX 中是否可以将节点定义为子图?