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

如何使Mermaid流程图的子图沿垂直中线对齐?

解决Mermaid Elk布局子图垂直对齐问题

要让四个子图在垂直方向上居中对齐到同一条直线,可通过以下两种实用方法实现:


方法1:利用Elk布局的强制对齐参数

Elk布局支持通过自定义配置,强制子图容器的水平中心对齐。修改后的代码如下:

%%{init: {"flowchart": { "htmlLabels": false}, 'layout': 'elk', "elk": {
  "layoutOptions": {
    "org.eclipse.elk.layered.alignment": "CENTER",
    "org.eclipse.elk.hierarchyHandling": "INCLUDE_CHILDREN",
    "org.eclipse.elk.spacing.nodeNode": "20"
  }
}}}%%
flowchart TD

    classDef troncal fill:#0ef,stroke:#333,stroke-width:1px
    classDef obligatoria fill:lightgray,stroke:#333,stroke-width:1px
    classDef optativa fill:lightgreen,stroke:#333,stroke-width:1px

 subgraph C1["**Primer curso**"]
         M1[M I]:::troncal
         FI[FI]:::troncal
         M2[M II]:::troncal
         F1[F I]:::troncal
         QF[QF]:::troncal
         QI[QI]:::troncal
         IIQ[IIQ]:::obligatoria
         MMI[MMI]:::obligatoria
  end

 subgraph C2["**Segundo curso**"]
         M3[M III]:::troncal
         MF[MF]:::obligatoria
         TQA[TQA]:::obligatoria
         QO[QO]:::troncal
         CM[CM]:::obligatoria
         E[E]:::obligatoria
         MMM[MMM]:::obligatoria
         TC[TC]:::obligatoria
         EOE[EOE]:::troncal
         F2[F II]:::troncal
  end
 subgraph C3["**Tercer curso**"]
        EAC[EAC]:::obligatoria
        EIQ1[EIQ I]:::obligatoria
        T[T]:::obligatoria
        PQI[PQI]:::obligatoria
        RQ[RQ]:::obligatoria
        OS[OS]:::obligatoria
        CQA[CQA]:::obligatoria
  end

subgraph C4["**Cuarto curso**"]
        SC[SC]:::obligatoria
        EIQ2[EIQ II]:::obligatoria
        IA[IA]:::obligatoria
        OGP[OGP]:::obligatoria
        RMDM[RMDM]:::obligatoria
        TFG[TFG]:::obligatoria
  end
    
    M1 --> M2 & MMI
    M2 --> M3 & MF & TQA & E & MMM
    M3 --> EAC & PQI & RQ
    F1 --> MF & TQA & E & MMM & EAC
    F2 --> E & EAC & IA
    FI --> EAC & RQ
    QF --> TQA
    QO --> CM & IA
    QI --> CM & IA
    IIQ --> TC & PQI
    TQA --> T & RQ & EIQ2
    MF --> EIQ1 & RQ
    TC --> EIQ1 & T & RQ
    EOE --> PQI & OGP
    CQA --> RQ
    RQ --> EIQ2
    OS --> EIQ2
    MMM --> RMDM
    CM --> RMDM
    EAC --> SC
    OGP--> TFG

核心配置说明:

  • org.eclipse.elk.layered.alignment": "CENTER":强制所有节点(包括子图容器)在水平方向居中对齐
  • org.eclipse.elk.hierarchyHandling": "INCLUDE_CHILDREN":让布局器将子图内部节点纳入整体计算,保证子图容器对齐的准确性

方法2:添加隐藏中心节点串联

若方法1效果不佳,可通过添加不可见的中心节点,给布局器明确的对齐参考:

%%{init: {"flowchart": { "htmlLabels": false}, 'layout': 'elk'}}%%
flowchart TD

    classDef troncal fill:#0ef,stroke:#333,stroke-width:1px
    classDef obligatoria fill:lightgray,stroke:#333,stroke-width:1px
    classDef optativa fill:lightgreen,stroke:#333,stroke-width:1px
    classDef hidden display:none

    %% 隐藏的对齐参考节点
    C1_center[ ]:::hidden
    C2_center[ ]:::hidden
    C3_center[ ]:::hidden
    C4_center[ ]:::hidden

    C1_center --> C2_center --> C3_center --> C4_center

 subgraph C1["**Primer curso**"]
         M1[M I]:::troncal
         FI[FI]:::troncal
         M2[M II]:::troncal
         F1[F I]:::troncal
         QF[QF]:::troncal
         QI[QI]:::troncal
         IIQ[IIQ]:::obligatoria
         MMI[MMI]:::obligatoria
         %% 将子图内部节点连接到中心节点,强化对齐
         M1 --- C1_center
         FI --- C1_center
  end

 subgraph C2["**Segundo curso**"]
         M3[M III]:::troncal
         MF[MF]:::obligatoria
         TQA[TQA]:::obligatoria
         QO[QO]:::troncal
         CM[CM]:::obligatoria
         E[E]:::obligatoria
         MMM[MMM]:::obligatoria
         TC[TC]:::obligatoria
         EOE[EOE]:::troncal
         F2[F II]:::troncal
         M3 --- C2_center
         QO --- C2_center
  end
 subgraph C3["**Tercer curso**"]
        EAC[EAC]:::obligatoria
        EIQ1[EIQ I]:::obligatoria
        T[T]:::obligatoria
        PQI[PQI]:::obligatoria
        RQ[RQ]:::obligatoria
        OS[OS]:::obligatoria
        CQA[CQA]:::obligatoria
        EAC --- C3_center
        RQ --- C3_center
  end

subgraph C4["**Cuarto curso**"]
        SC[SC]:::obligatoria
        EIQ2[EIQ II]:::obligatoria
        IA[IA]:::obligatoria
        OGP[OGP]:::obligatoria
        RMDM[RMDM]:::obligatoria
        TFG[TFG]:::obligatoria
        SC --- C4_center
        TFG --- C4_center
  end
    
    M1 --> M2 & MMI
    M2 --> M3 & MF & TQA & E & MMM
    M3 --> EAC & PQI & RQ
    F1 --> MF & TQA & E & MMM & EAC
    F2 --> E & EAC & IA
    FI --> EAC & RQ
    QF --> TQA
    QO --> CM & IA
    QI --> CM & IA
    IIQ --> TC & PQI
    TQA --> T & RQ & EIQ2
    MF --> EIQ1 & RQ
    TC --> EIQ1 & T & RQ
    EOE --> PQI & OGP
    CQA --> RQ
    RQ --> EIQ2
    OS --> EIQ2
    MMM --> RMDM
    CM --> RMDM
    EAC --> SC
    OGP--> TFG

这种方法通过隐藏节点的垂直串联,让布局器自动将子图对齐到同一垂直线,即使子图内部节点数量或文本长度不同,也能保证整体对齐效果。


内容的提问来源于stack exchange,提问作者Pedro A. Garcia-Sanchez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 00:05:54