Often an layout engine places nodes on undesired locations. Weighted invisible edges allow to manipulate nodes location. This graph defines rigid grid of heavy weighted nodes and arbitrary path on the grid. You can rename and hide nodes to have graph which looks like matrix or table. graphviz , svg , png
graph grid { fontname="Helvetica,Arial,sans-serif" node [fontname="Helvetica,Arial,sans-serif"] edge [fontname="Helvetica,Arial,sans-serif"] layout=dot label="grid" labelloc = "t" node [shape=plaintext] // arbitrary path on rigid grid A0 -- B1 -- C2 -- D3 -- E4 -- F5 -- G6 -- H7 H0 -- G1 -- F2 -- E3 -- D4 -- C5 -- B6 -- A7 edge [weight=1000 style=dashed color=dimgrey] // uncomment to hide the grid //edge [style=invis] A0 -- A1 -- A2 -- A3 -- A4 -- A5 -- A6 -- A7 B0 -- B1 -- B2 -- B3 -- B4 -- B5 -- B6 -- B7 C0 -- C1 -- C2 -- C3 -- C4 -- C5 -- C6 -- C7 D0 -- D1 -- D2 -- D3 -- D4 -- D5 -- D6 -- D7 E0 -- E1 -- E2 -- E3 -- E4 -- E5 -- E6 -- E7 F0 -- F1 -- F2 -- F3 -- F4 -- F5 -- F6 -- F7 G0 -- G1 -- G2 -- G3 -- G4 -- G5 -- G6 -- G7 H0 -- H1 -- H2 -- H3 -- H4 -- H5 -- H6 -- H7 rank=same {A0 -- B0 -- C0 -- D0 -- E0 -- F0 -- G0 -- H0} rank=same {A1 -- B1 -- C1 -- D1 -- E1 -- F1 -- G1 -- H1} rank=same {A2 -- B2 -- C2 -- D2 -- E2 -- F2 -- G2 -- H2} rank=same {A3 -- B3 -- C3 -- D3 -- E3 -- F3 -- G3 -- H3} rank=same {A4 -- B4 -- C4 -- D4 -- E4 -- F4 -- G4 -- H4} rank=same {A5 -- B5 -- C5 -- D5 -- E5 -- F5 -- G5 -- H5} rank=same {A6 -- B6 -- C6 -- D6 -- E6 -- F6 -- G6 -- H6} rank=same {A7 -- B7 -- C7 -- D7 -- E7 -- F7 -- G7 -- H7} } // grid.dot by Costa Shulyupin
Costa Shulyupin's Grid could take the place of the Input Plane.