如何用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()
接下来拆解每个需求的实现细节:
- 添加节点标签:在节点的
Scattertrace里设置mode="markers+text",然后用text=nodes绑定节点名称,textposition可以调整标签的位置,确保不遮挡节点。 - 边标签与权重关联:边的
Scattertrace设置mode="lines+text",text直接用权重列表转成字符串,textposition="middle center"让标签正好在边的中间位置。 - 按权重控制线宽:边的
line.width直接传入权重列表,如果权重数值太小/太大,可以乘以一个缩放系数(比如示例里的*2)来调整视觉效果。 - 彻底禁用交互:
- 每个trace都设置
hoverinfo="none",避免单个元素的悬停提示; - 全局布局设置
hovermode=False,彻底关闭悬停功能; - 隐藏坐标轴、图例和布局调整按钮,同时设置
dragmode=False禁用节点拖拽,确保图完全静态。
- 每个trace都设置
如果需要导出适合论文的高分辨率图片,用fig.write_image()方法,scale=2可以生成2倍分辨率的图片,避免模糊。
内容的提问来源于stack exchange,提问作者user5154079
相关产品推荐
相关产品推荐

