You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

mpld3.show()报int不可JSON序列化 如何实现networkx节点hover交互

报错原因
  • mpld3的PointLabelTooltip插件要求传入的标签为字符串类型,直接传入G.nodes()返回的整数节点ID,序列化JSON时会触发类型错误
  • 同时混用mpld3和mplcursors会产生交互逻辑冲突:mpld3是将图表转为HTML/JS实现web端交互,mplcursors是matplotlib原生桌面交互插件,二者无法同时生效
  • 要在Jupyter内直接渲染交互式图表,无需调用mpld3.show()弹出新窗口,替换为mpld3.display()即可在当前单元格输出交互内容
修正后可运行代码
import matplotlib.pyplot as plt
import mpld3
import networkx as nx

# 构建网络,final_net替换为你自己的边表变量
G = nx.from_pandas_edgelist(final_net,'col_A','col_B')
pos = nx.spring_layout(G)

fig, ax = plt.subplots(subplot_kw=dict(facecolor='#EEEEEE'))
# 绘制网络元素,直接接收节点返回对象
scatter = nx.draw_networkx_nodes(G, pos, ax=ax, node_size=300, alpha=0.8)
nx.draw_networkx_edges(G, pos, ax=ax, alpha=0.5)

# 核心修改:将节点ID转为字符串列表作为标签
labels = [str(node) for node in G.nodes()]
tooltip = mpld3.plugins.PointLabelTooltip(scatter, labels=labels)
mpld3.plugins.connect(fig, tooltip)

# 隐藏坐标轴
ax.set_axis_off()

# Jupyter内直接渲染交互式图表
mpld3.display(fig)
效果说明

运行后会在当前Jupyter单元格内输出交互式网络图,鼠标悬浮在节点上即可自动显示对应的节点ID,无需弹出额外窗口。

内容的提问来源于stack exchange,提问作者Slowat_Kela

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 10:36:04