# How to place subgraphs next to each other and align them w.r.t. their bottom end?

**URL:** <https://forum.graphviz.org/t/how-to-place-subgraphs-next-to-each-other-and-align-them-w-r-t-their-bottom-end/2867>\
**Category:** Help\
**Created:** [March 26, 2025, 9:32pm UTC](https://forum.graphviz.org/t/how-to-place-subgraphs-next-to-each-other-and-align-them-w-r-t-their-bottom-end/2867 "2025-03-26T21:32:12Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Photon](https://avatars.discourse-cdn.com/v4/letter/p/b5a626/32.png) [@Photon](https://forum.graphviz.org/u/Photon)\
**Post date:** [March 26, 2025, 9:32pm UTC](https://forum.graphviz.org/t/how-to-place-subgraphs-next-to-each-other-and-align-them-w-r-t-their-bottom-end/2867/1 "2025-03-26T21:32:12Z")

</div>

Hi guys,

I am trying to align three subgraphs next to each other. Their labels are positioned on the bottom and it would be great if the labels could be aligned.

Here is how the code currently looks like:

[dot verbose=true]

```auto
digraph {
	node [shape="box3d", fontname="Noto Sans Bold", margin=0.1];
	fontsize="40";
	graph [style = "filled"; color = "#EEEEEE";];
	router[label="MNet Router \n(Cisco C1111-8p)"];
	firewall[label="Firewall \n(Sophos XGS 108)"];
	subgraph virtual {
		subgraph cluster_verwaltungsnetz {
			label="Verwaltungsnetz";
			labelloc="b";
			style="filled";
			shape="box";
			color=red;
			node [style="filled", fillcolor=white, color=black];
			switch2[label="Switch \n(Verwaltungsnetz)",height=1];
			server[label=<
				<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
					<TR><TD>Server:<br align="left"/>Grommunio (Mails, Kalender)<br align="left"/>Netzwerklaufwerke (S:\, L:\, ...)<br align="left"/>Backup (Datensicherung)</TD><TD PORT="f1">NAS</TD></TR>
				</TABLE>
			>];
			pcv1[label="PC 1"];
			pcv2[label="PC 2"];
			pcv3[label="PC 3"];
			pcv4[label="PC 4"];
			pcv5[label="PC 5"];
			switch2 -> pcv1;
			switch2 -> pcv2;
			switch2 -> pcv3;
			switch2 -> pcv4;
			switch2 -> pcv5
			switch2 -> server[dir="back"];

			{rank = same; switch2; server;}
			space1 [fixedsize=true, height=3 style=invis]
		}

		subgraph cluster_dozentennetz {
			label="Pädagogisches Netz";
			labelloc="b";
			style="filled";
			shape="box";
			color=orange;
			node [style="filled", fillcolor=white, color=black];
			space2 [fixedsize=true, height=2 style=invis]
			switch1[label="Switch \n(Dozenten- und Studentennetz)",height=1];
			nas[label="NAS:\nNetzwerklaufwerke\n(Dozenten-Share,\nStudenten-Share)"];
			wlan[shape=component, label=<
				<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
					<TR><TD colspan="2">WLAN</TD></TR>
					<TR><TD>Dozenten<br/>(schnell)</TD><TD PORT="f1">Studenten<br/>(langsam)</TD></TR>
				</TABLE>
			>];
			pc1[label="PCs\lDoZi"];
			pc2[label="PCs\lInfo-Raum"];
			pc3[label="PCs\lFachräume"];
			laptop[label="Laptop\lCafeteria"];
			as1[label="AirServer 1", shape=ellipse];
			as2[label="AirServer 2", shape=ellipse];
			switch1 -> pc1;
			switch1 -> pc2;
			switch1 -> pc3;
			switch1-> as1;
			switch1-> as2;
			switch1 -> wlan;
			wlan -> laptop;
			switch1 ->nas[dir="back"];
			{rank = same; switch1; nas;}
		}

		subgraph cluster_bildschirme {
			label="Bildschirme";
			labelloc="b";
			raspi1[label="Bildschirm EG", shape=tab];
			raspi2[label="Bildschirm DoZi", shape=tab];
			raspi3[label="Bildschirm Cafeteria", shape=tab];
			raspi1 -> wlan[dir="back"];
			switch2->raspi1;
			raspi2 -> wlan[dir="back"];
			switch2->raspi2;
			raspi3 -> wlan[dir="back"];
		}
	}
	router -> firewall;
	firewall -> switch1;
	firewall -> switch2;
}

```

[/dot]

Unfortunately, the three clusters are not aligned at all. Is there any way, I could align them such that their labels are next to each other?

Thanks for any input!  
Photon

---

<div class="post-metadata">

**Author:** ![steveroush](https://avatars.discourse-cdn.com/v4/letter/s/a9adbd/32.png) [@steveroush](https://forum.graphviz.org/u/steveroush)\
**Post date:** [March 26, 2025, 11:23pm UTC](https://forum.graphviz.org/t/how-to-place-subgraphs-next-to-each-other-and-align-them-w-r-t-their-bottom-end/2867/2 "2025-03-26T23:23:25Z")

</div>

- used **minlen** ([minlen | Graphviz](https://www.graphviz.org/docs/attrs/minlen/)) to push nodes “down”
- reversed 3 edges to fix ranking (the edges were"pushing" the wlan node down)
- moved cluster-to-cluster edges to the Root level

```auto
// from https://forum.graphviz.org/t/how-to-place-subgraphs-next-to-each-other-and-align-them-w-r-t-their-bottom-end/2867
digraph {
	node [shape="box3d", fontname="Noto Sans Bold", margin=0.1];
	fontsize="40";
	graph [style = "filled"; color = "#EEEEEE";];
	router[label="MNet Router \n(Cisco C1111-8p)"];
	firewall[label="Firewall \n(Sophos XGS 108)"];

        subgraph virtual {
		subgraph cluster_verwaltungsnetz {
			label="Verwaltungsnetz";
			labelloc="b";
			style="filled";
			shape="box";
			color=red;
			node [style="filled", fillcolor=white, color=black];
			switch2[label="Switch \n(Verwaltungsnetz)",height=1];
			server[label=<
				<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
					<TR><TD>Server:<br align="left"/>Grommunio (Mails, Kalender)<br align="left"/>Netzwerklaufwerke (S:\, L:\, ...)<br align="left"/>Backup (Datensicherung)</TD><TD PORT="f1">NAS</TD></TR>
				</TABLE>
			>];
			pcv1[label="PC 1"];
			pcv2[label="PC 2"];
			pcv3[label="PC 3"];
			pcv4[label="PC 4"];
			pcv5[label="PC 5"];
			switch2 -> pcv1;
			switch2 -> pcv2;
			switch2 -> pcv3;
			switch2 -> pcv4;
			switch2 -> pcv5
			switch2 -> server[dir="back"];

			{rank = same; switch2; server;}
			space1 [fixedsize=true, height=3 style=invis]
		}

		subgraph cluster_dozentennetz {
			label="Pädagogisches Netz";
			labelloc="b";
			style="filled";
			shape="box";
			color=orange;
			node [style="filled", fillcolor=white, color=black];
			space2 [fixedsize=true, height=2 style=invis]
			switch1[label="Switch \n(Dozenten- und Studentennetz)",height=1];
			nas[label="NAS:\nNetzwerklaufwerke\n(Dozenten-Share,\nStudenten-Share)"];
			wlan[shape=component, label=<
				<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
					<TR><TD colspan="2">WLAN</TD></TR>
					<TR><TD>Dozenten<br/>(schnell)</TD><TD PORT="f1">Studenten<br/>(langsam)</TD></TR>
				</TABLE>
			>];
			pc1[label="PCs\lDoZi"];
			pc2[label="PCs\lInfo-Raum"];
			pc3[label="PCs\lFachräume"];
			laptop[label="Laptop\lCafeteria"];
			as1[label="AirServer 1", shape=ellipse];
			as2[label="AirServer 2", shape=ellipse];
			switch1 -> pc1;
			switch1 -> pc2;
			switch1 -> pc3;
			switch1-> as1;
			switch1-> as2;
			switch1 -> wlan;
			wlan -> laptop;
			switch1 ->nas[dir="back"];
			{rank = same; switch1; nas;}
		}

		subgraph cluster_bildschirme {
			label="Bildschirme";
			labelloc="b";
			raspi1[label="Bildschirm EG", shape=tab];
			raspi2[label="Bildschirm DoZi", shape=tab];
			raspi3[label="Bildschirm Cafeteria", shape=tab];

		}
	}
	router -> firewall
	firewall -> switch1
	firewall -> switch2 [minlen=2]; // to force bottom alignment
//	raspi1 -> wlan[dir="back"]; // reworked edges to align clusters
//	raspi2 -> wlan[dir="back"];
//	raspi3 -> wlan[dir="back"];
	wlan -> raspi1  
	wlan -> raspi2
	wlan -> raspi3
	switch2->raspi1;
	switch2->raspi2;
}

```

Giving:

 ![forum2867_1](https://global.discourse-cdn.com/graphviz/original/2X/4/4ec58656e1076d703bd947fe4246997b36712abd.png)

---

<div class="post-metadata">

**Author:** ![Photon](https://avatars.discourse-cdn.com/v4/letter/p/b5a626/32.png) [@Photon](https://forum.graphviz.org/u/Photon)\
**Post date:** [March 27, 2025, 4:33pm UTC](https://forum.graphviz.org/t/how-to-place-subgraphs-next-to-each-other-and-align-them-w-r-t-their-bottom-end/2867/3 "2025-03-27T16:33:56Z")

</div>

Thanks a ton, works like a charm!
