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

如何用Python Plotly自定义Networkx图:添加标签及控制边属性

解决Plotly Python网络图的标签、线宽与非交互式设置需求

没问题,我帮你整理了完整的实现代码,完全贴合你的需求——添加节点/边标签、按权重控制线宽,并且彻底禁用交互悬停,适合论文用的静态图。

先上完整示例代码,你可以直接替换成自己的节点、边和权重数据:

import plotly.graph_objects as go

# ---------------------- 示例数据(替换成你自己的) ----------------------
nodes = ["A", "B", "C", "D", "E"]  # 节点名称
node_sizes = [30, 40, 25, 35, 20]  # 你已经设置好的节点大小
edges_source = [0, 0, 1, 2, 3]     # 边的源节点索引
edges_target = [1, 2, 3, 4, 4]     # 边的目标节点索引
weights = [2, 5, 3, 1, 4]          # 边的权重列表

# ---------------------- 创建网络图 ----------------------
fig = go.Figure()

# 1. 添加节点(带标签)
fig.add_trace(go.Scatter(
    x=[],  # 布局会自动计算,留空即可
    y=[],
    mode="markers+text",  # 同时显示标记和文本标签
    text=nodes,  # 节点标签内容
    textposition="top center",  # 标签位置,可选:top/bottom/left/right center等
    marker=dict(
        size=node_sizes,  # 你已经设置好的节点大小
        color="skyblue"  # 节点颜色,可自定义
    ),
    hoverinfo="none"  # 禁用节点悬停信息
))

# 2. 添加边(带权重标签、按权重控制线宽)
fig.add_trace(go.Scatter(
    x=[],
    y=[],
    mode="lines+text",  # 同时显示线条和边标签
    text=[str(w) for w in weights],  # 边标签用权重数值
    textposition="middle center",  # 标签放在边的中间
    line=dict(
        width=[w * 2 for w in weights],  # 按权重控制线宽,*2是缩放系数,可调整
        color="gray"  # 边的颜色,可自定义
    ),
    hoverinfo="none"  # 禁用边悬停信息
))

# ---------------------- 网络图布局设置 ----------------------
fig.update_layout(
    title="论文用网络图",  # 自定义标题
    showlegend=False,  # 隐藏图例,不需要的话可以去掉
    hovermode=False,  # 全局禁用悬停交互
    xaxis=dict(showgrid=False, zeroline=False, visible=False),  # 隐藏x轴
    yaxis=dict(showgrid=False, zeroline=False, visible=False),  # 隐藏y轴
    height=600,  # 图的高度,可自定义
    width=800    # 图的宽度,可自定义
)

# 自动计算节点位置(用Plotly内置的布局算法)
fig.update_layout(
    updatemenus=[dict(type="buttons", showactive=False)]  # 隐藏默认的布局调整按钮
)
fig.update_layout(
    annotations=[],
    dragmode=False  # 禁用拖拽节点的交互
)

# 生成静态图(如果需要导出为图片,用下面的代码)
# fig.write_image("network_plot.png", format="png", scale=2)  # scale=2提高分辨率,适合论文

fig.show()

接下来拆解每个需求的实现细节:

  • 添加节点标签:在节点的Scatter trace里设置mode="markers+text",然后用text=nodes绑定节点名称,textposition可以调整标签的位置,确保不遮挡节点。
  • 边标签与权重关联:边的Scatter trace设置mode="lines+text",text直接用权重列表转成字符串,textposition="middle center"让标签正好在边的中间位置。
  • 按权重控制线宽:边的line.width直接传入权重列表,如果权重数值太小/太大,可以乘以一个缩放系数(比如示例里的*2)来调整视觉效果。
  • 彻底禁用交互:
    • 每个trace都设置hoverinfo="none",避免单个元素的悬停提示;
    • 全局布局设置hovermode=False,彻底关闭悬停功能;
    • 隐藏坐标轴、图例和布局调整按钮,同时设置dragmode=False禁用节点拖拽,确保图完全静态。

如果需要导出适合论文的高分辨率图片,用fig.write_image()方法,scale=2可以生成2倍分辨率的图片,避免模糊。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:23:37