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

如何用D2绘图语言在两个柱形节点间实现指定布局的形状渲染?

实现D2中自定义分区布局的方案

完全可以在D2中实现你想要的自定义布局,以下是针对不同引擎的具体实现方式:

ELK引擎(推荐)

ELK引擎提供了最精细的布局控制能力,能完美匹配你的需求:

  • 水平对齐磁盘节点:通过设置节点的垂直坐标(y值)一致,或者利用ELK的对齐约束,让nvme0n1和nvme1n1保持水平对齐。
  • 中间容器垂直排列:将RAID1、RAID0、SWAP0、SWAP1设置为同一水平坐标(x值),并依次设置递增的垂直坐标,让它们形成一列;也可以将这些节点放入一个垂直布局的容器中,自动实现垂直排列。
  • 直线连线:ELK默认支持直线连线,只需确保源节点的出口端口与目标节点的入口端口在同一轴线上(比如给磁盘分区设置port: right,RAID容器设置port: left),即可让连线保持直线。

原生布局指令(兼容多引擎)

如果不想依赖ELK,也可以通过D2的原生属性强制控制布局:

  • 给nvme0n1和nvme1n1设置相同的y坐标,比如:
    nvme0n1: {shape: cylinder, y: 0}
    nvme1n1: {shape: cylinder, y: 0}
    
  • 给中间的容器节点设置统一的x坐标,按垂直方向依次排布:
    RAID1: {x: 250, y: 0}
    RAID0: {x: 250, y: 160}
    SWAP0: {x: 250, y: 320}
    SWAP1: {x: 250, y: 480}
    
  • 给连线添加直线样式:
    nvme0n1.p1 -> RAID1: {style.stroke: straight}
    

完整示例代码

layout: elk
elk:
  algorithm: box # 更适合规整布局的算法

nvme0n1: {shape: cylinder, y: 0, width: 120}
nvme0n1.p1 -> RAID1: {style.stroke: straight}
nvme0n1.p3 -> RAID0: {style.stroke: straight}

nvme1n1: {shape: cylinder, y: 0, x: 500, width: 120}
nvme1n1.p1 -> RAID1: {style.stroke: straight}
nvme1n1.p3 -> RAID0: {style.stroke: straight}

RAID1: {x: 250, y: 0, width: 100}
RAID0: {x: 250, y: 160, width: 100}
SWAP0: {x: 250, y: 320, width: 100}
SWAP1: {x: 250, y: 480, width: 100}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 20:55:21