I'm trying to make graph using Networkx and rendering the graph using Bokeh. Everything seems to be working except for the hover tooltip I've consulted Data tooltips in Bokeh don't show data, showing '???' instead, Bokeh hover tooltip not displaying all data - Ipython notebook, and read the documentation on ColumnDataSource, but i still can't figure out why tooltips won't render labels from one of the columns of my dataframe.
Below is a overly simplified of the data from an excel file, which I've been playing around with.
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
I tried running the following code:
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)
After I run the script, i get the following:
The group column label correctly displays, but not the subtopic. I'd appreciate any ideas or pointers.