Pyvis如何实现节点间直线连接及指定层级连线样式?
Pyvis实现层级直角连线方案
Pyvis完全可以实现你需求的节点间层级关联的直角连线效果,仅需调整你现有代码中的配置项即可匹配示例图的连线样式。
核心修改点
你当前代码中edges配置的"smooth": false会生成两点之间的直连斜线,要实现示例图的阶梯状直角折线,只需调整edges的平滑模式为层级专属的折线类型即可:
- 将
edges.smooth从false改为启用状态,指定type: "hierarchical",同时设置roundness: 0获得无圆角的纯直角折线 - 可按需调整连线宽度
width参数,匹配示例图的线条粗细
修改后完整代码
from pyvis.network import Network net = Network(notebook=True, height = 1000, width = 2000, font_color="black", bgcolor ='black', heading='Network Alto') # 节点定义和你原有代码完全一致 net.add_node('EXCESS RET. 1.0%', shape='box', color = '#e40513') net.add_node('CARRY 2.8%', shape='box', color = '#716f71') net.add_node('MOMEMTUM -1.7%', shape='box', color = '#d06a26') net.add_node('VALUE -0.1%', shape='box', color = '#018480') # 子维度节点 net.add_node('EQUITIES -0.1%', shape='box', color = '#499a35') net.add_node('BONDS -0.1%', shape='box', color = '#01a3e1') net.add_node('CURRENCIES -0.1%', shape='box', color = '#9750e3') # 边定义和原有代码一致 net.add_edge('EXCESS RET. 1.0%','CARRY 2.8%',color='white') net.add_edge('EXCESS RET. 1.0%','MOMEMTUM -1.7%',color='white') net.add_edge('EXCESS RET. 1.0%','VALUE -0.1%',color='white') net.add_edge('CARRY 2.8%','EQUITIES -0.1%',color='white') net.add_edge('CARRY 2.8%','BONDS -0.1%',color='white') net.add_edge('CARRY 2.8%','CURRENCIES -0.1%',color='white') # 仅修改了edges部分的配置 net.set_options("""var options = { "edges": { "color": { "inherit": false }, "smooth": { "enabled": true, "type": "hierarchical", "roundness": 0 }, "width": 2 }, "layout": { "hierarchical": { "enabled": true, "levelSeparation": 200, "nodeSpacing": 60, "direction": "LR", "sortMethod": "directed" } }, "physics": { "hierarchicalRepulsion": { "centralGravity": 0 }, "minVelocity": 0.75, "solver": "hierarchicalRepulsion" } }""") net.show("basic.html")
效果说明
修改后生成的连线会自动适配层级布局,从父节点水平伸出后垂直转折连接到对应子节点,完全匹配你提供的示例图的连线样式。如果需要调整折线的转折位置,可修改levelSeparation参数调整层级间距,或者调整smooth.roundness参数获得带圆角的折线效果。
内容的提问来源于stack exchange,提问作者Flo Cp
相关产品推荐
相关产品推荐

