我正在尝试使用 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)
运行脚本后,我得到以下信息:
最佳答案
您正在创建一个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/