4

I am working on a diagram for my thesis; I extract data from a simulation (left column), compute it in some way (center column) and get a result (right column) which is the input for another code, so my diagram is basically a flow diagram of this process. This is the source code of the diagram so far:

\documentclass[a4paper,english]{article}

\usepackage{mathtools} \usepackage{siunitx} \usepackage{tikz} \usetikzlibrary{positioning,arrows.meta}

\begin{document}

\begin{tikzpicture} [align=center,node distance=2.5cm] \node[draw, rectangle] (a) {$a_{\text{g}}$}; \nodedraw, rectangle, right of=a {$\rho_{\text{g}} \cdot a_{\text{g}}^3$}; \nodedraw, rectangle, right of=b {$m_{\text{g,s}}$}; \node[draw, rectangle, below of=a] (d) {$\rho_{\text{g}}$}; \nodedraw, rectangle, below of=b {SFR}; \nodedraw, rectangle, above of=f {$h_{\text{g,s}}$}; \node[draw, rectangle, below of=d] (g) {$f_{\text{H}2}_{\text{g}}$}; \nodedraw, rectangle, below of=e {nH}; \nodedraw, rectangle, below of=f {$\dot{M}{\text{g,s}}$}; \node[draw, rectangle, below of=g] (j) {$P{\text{g}}$}; \nodedraw, rectangle, below of=h {T*}; \nodedraw, rectangle, below of=i {$\text{nH}{\text{g,s}}$}; \node[below of=j] (m) {}; \nodedraw, rectangle, below of=k {$f\{\text{H}2}{\text{g}} / 0.76$}; \nodedraw, rectangle, below of=l {$T{\text{g,s}}$}; \node[draw, rectangle, below of=m] (p) {$Z_{\text{g}}$}; \nodedraw, rectangle, below of=n {$Z_{\text{g}}/Z_\odot$}; \nodedraw, rectangle, below of=o {$f_\text{H}2_{\text{g,s}}$}; \node[below of=p] (s) {}; \nodedraw, rectangle, below of=q {$a_x_\odot \cdot \frac{Z_{\text{g}}}{Z_\odot}$}; \nodedraw, rectangle, below of=r {$Z_{\text{g,s}}$}; \node[draw, rectangle, below of=s] (bb) {$\vec{x}{\text{g}}$}; \nodedraw, rectangle, below of=t {$(\vec{x}{\text{g}} - \vec{r}{\text{center}}) \cdot 12,000 , \si{\kilo pc}$}; \nodedraw, rectangle, below of=u {$a_x{\text{g,s}}$}; \nodedraw, rectangle, below of=w {$\vec{x}{\text{g,s}}$}; \node[draw, rectangle, below of=bb] (cc) {$v{\text{g}}$}; \nodedraw, rectangle, below of=y {$v_{\text{g,s}}$}; \node[above of=a] (empty1) {}; \node[above of=b] (empty2) {}; \noderectangle, above of=empty1 {Simulation Data}; \noderectangle, above of=empty2 {Conversion}; \noderectangle, above of=c {Input}; \draw[-{Latex[scale=2.0]}] (a) -- (b); \draw[-{Latex[scale=2.0]}] (a) -- (c); \draw[-{Latex[scale=2.0]}] (b) -- (f); \draw[-{Latex[scale=2.0]}] (d) -- (b); \draw[-{Latex[scale=2.0]}] (d) -- (e); \draw[-{Latex[scale=2.0]}] (e) -- (i); \draw[-{Latex[scale=2.0]}] (d) -- (h); \draw[-{Latex[scale=2.0]}] (h) -- (l); \draw[-{Latex[scale=2.0]}] (g) -- (e); \draw[-{Latex[scale=2.0]}] (g) -- (h); \draw[-{Latex[scale=2.0]}] (g) -- (n); \draw[-{Latex[scale=2.0]}] (l) -- (e); \draw[-{Latex[scale=2.0]}] (l) -- (k); \draw[-{Latex[scale=2.0]}] (j) -- (k); \draw[-{Latex[scale=2.0]}] (k) -- (o); \draw[-{Latex[scale=2.0]}] (n) -- (r); \draw[-{Latex[scale=2.0]}] (p) -- (q); \draw[-{Latex[scale=2.0]}] (q) -- (u); \draw[-{Latex[scale=2.0]}] (p) -- (t); \draw[-{Latex[scale=2.0]}] (t) -- (w); \draw[-{Latex[scale=2.0]}] (bb) -- (v); \draw[-{Latex[scale=2.0]}] (v) -- (y); \draw[-{Latex[scale=2.0]}] (cc) -- (aa); \end{tikzpicture}

\end{document}

This results in the following diagram:

flow diagram

I have the following issues with this: I dislike the positioning of the rectangles. Their vertical distance is too high and they should use the whole horizontal size of the page. Maybe it would also look better if each column used a left alignment, so the left side of each rectangle begins at the same x-coordinate. How can I achieve this?

Thanks in advance for your answer.

e: Thanks to marmot for suggesting matrices, I have the following code now:

\begin{center}
\captionof{figure}{Diagram for showing the process of converting the gas simulation data to input for SÍGAME}
\label{dia:conversion-diagram}
\begin{tikzpicture}[auto, block-center/.style ={rectangle, draw=black, thick, fill=white, text centered}]
\matrix [column sep=10mm,row sep=4mm] {

\nodeblock-center {Simulation Data}; & \nodeblock-center {Conversion}; & \nodeblock-center {Input}; \

\node[block-center] (a) {$a_{\text{g}}$}; & & \nodeblock-center {$h_{\text{g,s}}$}; \

& \nodeblock-center {$\rho_{\text{g}} \cdot a_{\text{g}}^3$}; & \nodeblock-center {$m_{\text{g,s}}$}; \

\node[block-center] (d) {$\rho_{\text{g}}$}; & \nodeblock-center {SFR*};

& \nodeblock-center {$\dot{M}_{\text{g,s}}$}; \

\node[block-center] (g) {$f_{\text{H}2}{\text{g}}$}; & \nodeblock-center {nH*}; & \nodeblock-center {$\text{nH}{\text{g,s}}$}; \

\node[block-center] (j) {$P_{\text{g}}$}; & \nodeblock-center {T*}; & \nodeblock-center {$T_{\text{g,s}}$}; \

& \nodeblock-center {$f_{\text{H}2}{\text{g}} / 0.76$}; & \nodeblock-center {$f\\text{H}2_{\text{g,s}}$}; \

\node[block-center] (p) {$Z_{\text{g}}$}; & \nodeblock-center {$Z_{\text{g}}/Z_\odot$}; & \nodeblock-center {$Z_{\text{g,s}}$}; \

& \nodeblock-center {$a_x_\odot \cdot \frac{Z_{\text{g}}}{Z_\odot}$}; & \nodeblock-center {$a_x_{\text{g,s}}$}; \

\node[block-center] (bb) {$\vec{x}{\text{g}}$}; & \nodeblock-center {$(\vec{x}{\text{g}} - \vec{r}{\text{c,i}}) \cdot 12,000 , \si{\kilo pc} \cdot a{\text{exp}}$}; & \nodeblock-center {$\vec{x}_{\text{g,s}}$}; \

\node[block-center] (cc) {$v_{\text{g}}$}; & & \nodeblock-center {$v_{\text{g,s}}$};\ };

\draw[-{Latex[scale=1.5]}] (a) -- (b); \draw[-{Latex[scale=1.5]}] (a) -- (c); \draw[-{Latex[scale=1.5]}] (b) -- (f); \draw[-{Latex[scale=1.5]}] (d) -- (b); \draw[-{Latex[scale=1.5]}] (d) -- (e); \draw[-{Latex[scale=1.5]}] (e) -- (i); \draw[-{Latex[scale=1.5]}] (d) -- (h); \draw[-{Latex[scale=1.5]}] (h) -- (l); \draw[-{Latex[scale=1.5]}] (g) -- (e); \draw[-{Latex[scale=1.5]}] (g) -- (h); \draw[-{Latex[scale=1.5]}] (g) -- (n); \draw[-{Latex[scale=1.5]}] (l) -- (e); \draw[-{Latex[scale=1.5]}] (l) -- (k); \draw[-{Latex[scale=1.5]}] (j) -- (k); \draw[-{Latex[scale=1.5]}] (k) -- (o); \draw[-{Latex[scale=1.5]}] (n) -- (r);

\draw[-{Latex[scale=1.5]}] (p) -- (q); \draw[-{Latex[scale=1.5]}] (q) -- (u); \draw[-{Latex[scale=1.5]}] (p) -- (t); \draw[-{Latex[scale=1.5]}] (t) -- (w);

\draw[-{Latex[scale=1.5]}] (bb) -- (v); \draw[-{Latex[scale=1.5]}] (v) -- (y); \draw[-{Latex[scale=1.5]}] (cc) -- (aa);

\end{tikzpicture} \end{center}

which produces the following picture:

new flow diagram

This seems to be a lot more flexible and also already looks a whole lot better, thanks!

DominikR
  • 61
  • 2
  • You're probably looking for something like this, that means setting one by one the distance between nodes, am I right? – GiuTeX Aug 30 '18 at 13:23
  • 1
    To me it seems you were better off if you'd use a matrix of nodes for that and adjust the column width or separation to your needs. –  Aug 30 '18 at 14:19
  • Thanks for the matrix suggestion @marmot, that worked! – DominikR Aug 30 '18 at 17:39
  • 1
    Glad to hear! If your problem is solved, you may just accept GiuTeX' answer below because (s)he made a lot of effort and it doesn't cost you anything. (You could of course avoid some amount of repetition by setting a universal style of the nodes in the matrix, and edges may allow you to cook down the amount of code needed to draw the arrows.) –  Aug 30 '18 at 21:59

2 Answers2

1

I just changed the right of= with the right=WIDTH of command, which possibly gives what you're looking for.

\documentclass[a4paper,english]{article} 
\usepackage{mathtools}
\usepackage{siunitx}
\usepackage{tikz}
\usetikzlibrary{positioning, arrows.meta}

\begin{document}

\begin{tikzpicture}[align=center, node distance=2cm] 
\node[draw, rectangle] (a) {$a_{\text{g}}$};
\node[draw, rectangle, right=4cm of a](b) {$\rho_{\text{g}} \cdot a_{\text{g}}^3$};
\node[draw, rectangle, right=4cm of b](f) {$m_{\text{g,s}}$};
\node[draw, rectangle, below of=a] (d) {$\rho_{\text{g}}$};
\node[draw, rectangle, below of=b](e) {SFR*};
\node[draw, rectangle, above of=f](c) {$h_{\text{g,s}}$};
\node[draw, rectangle, below of=d] (g) {$f\_{\text{H}2}_{\text{g}}$};
\node[draw, rectangle, below of=e](h) {nH*};
\node[draw, rectangle, below of=f](i) {$\dot{M}_{\text{g,s}}$};
\node[draw, rectangle, below of=g] (j) {$P_{\text{g}}$};
\node[draw, rectangle, below of=h](k) {T*};
\node[draw, rectangle, below of=i](l) {$\text{nH}_{\text{g,s}}$};
\node[below of=j] (m) {};
\node[draw, rectangle, below of=k](n) {$f\_{\text{H}2}_{\text{g}} / 0.76$};
\node[draw, rectangle, below of=l](o) {$T_{\text{g,s}}$};
\node[draw, rectangle, below of=m] (p) {$Z_{\text{g}}$};
\node[draw, rectangle, below of=n](q) {$Z_{\text{g}}/Z_\odot$};
\node[draw, rectangle, below of=o](r) {$f\_\text{H}2_{\text{g,s}}$};
\node[below of=p] (s) {};
\node[draw, rectangle, below of=q](t) {$a\_x_\odot \cdot \frac{Z_{\text{g}}}{Z_\odot}$};
\node[draw, rectangle, below of=r](u) {$Z_{\text{g,s}}$};
\node[draw, rectangle, below of=s] (bb) {$\vec{x}_{\text{g}}$};
\node[draw, rectangle, below of=t](v) {$(\vec{x}_{\text{g}} - \vec{r}_{\text{center}}) \cdot 12,000 \, \si{\kilo pc}$};
\node[draw, rectangle, below of=u](w) {$a\_x_{\text{g,s}}$};
\node[draw, rectangle, below of=w](y) {$\vec{x}_{\text{g,s}}$};
\node[draw, rectangle, below of=bb] (cc) {$v_{\text{g}}$};
\node[draw, rectangle, below of=y](aa) {$v_{\text{g,s}}$};
\node[above of=a] (empty1) {};
\node[above of=b] (empty2) {};
\node[rectangle, above of=empty1](cap1) {Simulation Data};
\node[rectangle, above of=empty2](cap2) {Conversion};
\node[rectangle, above of=c](cap3) {Input};
\draw[-{Latex[scale=2.0]}] (a) -- (b);
\draw[-{Latex[scale=2.0]}] (a) -- (c);
\draw[-{Latex[scale=2.0]}] (b) -- (f);
\draw[-{Latex[scale=2.0]}] (d) -- (b);
\draw[-{Latex[scale=2.0]}] (d) -- (e);
\draw[-{Latex[scale=2.0]}] (e) -- (i);
\draw[-{Latex[scale=2.0]}] (d) -- (h);
\draw[-{Latex[scale=2.0]}] (h) -- (l);
\draw[-{Latex[scale=2.0]}] (g) -- (e);
\draw[-{Latex[scale=2.0]}] (g) -- (h);
\draw[-{Latex[scale=2.0]}] (g) -- (n);
\draw[-{Latex[scale=2.0]}] (l) -- (e);
\draw[-{Latex[scale=2.0]}] (l) -- (k);
\draw[-{Latex[scale=2.0]}] (j) -- (k);
\draw[-{Latex[scale=2.0]}] (k) -- (o);
\draw[-{Latex[scale=2.0]}] (n) -- (r);
\draw[-{Latex[scale=2.0]}] (p) -- (q);
\draw[-{Latex[scale=2.0]}] (q) -- (u);
\draw[-{Latex[scale=2.0]}] (p) -- (t);
\draw[-{Latex[scale=2.0]}] (t) -- (w);
\draw[-{Latex[scale=2.0]}] (bb) -- (v);
\draw[-{Latex[scale=2.0]}] (v) -- (y);
\draw[-{Latex[scale=2.0]}] (cc) -- (aa);
\end{tikzpicture}

\end{document}

enter image description here

Then if you need to reduce the vertical spacing just change node distance=2cm with something less, like node distance=1cm.

As @marmot pointed out a way to shorten your arrow-making code i by replacing

\draw[-{Latex[scale=2.0]}] (a) -- (b);
\draw[-{Latex[scale=2.0]}] (a) -- (c);
\draw[-{Latex[scale=2.0]}] (b) -- (f);
\draw[-{Latex[scale=2.0]}] (d) -- (b);
%...
\draw[-{Latex[scale=2.0]}] (cc) -- (aa);

with

\draw[-{Latex[scale=2.0]}] (a) edge (b) 
(a) edge (c) 
(b) edge (f) 
(d) edge (b) 
(d) edge (e) 
(e) edge (i) 
(d) edge (h) 
(h) edge (l) 
(g) edge (e) 
(g) edge (h) 
(g) edge (n) 
(l) edge (e) 
(l) edge (k) 
(j) edge (k) 
(k) edge (o) 
(n) edge (r) 
(p) edge (q) 
(q) edge (u) 
(p) edge (t) 
(t) edge (w) 
(bb) edge (v) 
(v) edge (y) 
(cc) edge (aa);
GiuTeX
  • 1,309
0

based on the marmot's suggestion to use matrix, use of the matrix of math nodes and defined style for empty cells the code is:

\documentclass[a4paper,english]{article}
\usepackage{mathtools}
\usepackage{siunitx}
\usepackage[skip=1ex]{caption}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,
                matrix}

\begin{document}
    \begin{figure}
    \sisetup{group-separator={,}}
    \centering
\caption{Diagram for showing the process of converting the gas simulation data to input for SÍGAME}
\label{dia:conversion-diagram}

\begin{tikzpicture}[empty/.style = {draw=none, anchor=center}]
\matrix (m) [matrix of math nodes,
             nodes={draw, thick, anchor=center},
             column sep=0mm,   row sep=5mm,
             column 2/.style = {column sep=10mm},
             row 1/.style = {nodes={draw=none}}
            ]
{
\text{simulation data}
    &   \text{Conversion}
        &   \text{input}                            \\
|[empty]|
    &   |[empty]|
            &   h_{\mathrm{g,s}}                    \\
a_{\mathrm{g}}
    &   \rho_{\mathrm{g}}{\cdot}a_{\mathrm{g}}^3
        &   m_{\mathrm{g,s}}                        \\
\rho_{\mathrm{g}}
    &   \mathrm{SFR*}
        &   \dot{M}_{\mathrm{g,s}}                  \\
f\_{\mathrm{H}2}_{\mathrm{g}}
    &   nH*
        &   \mathrm{nH}_{\mathrm{g,s}}              \\
P_{\mathrm{g}}
    &   T*
        &   T_{\mathrm{g,s}}                        \\
|[empty]|
    &   f\_{\mathrm{H}2}_{\mathrm{g}}/ 0.76
        &   f\_\mathrm{H2}_{\mathrm{g,s}}           \\
Z_{\mathrm{g}}
    &   Z_{\mathrm{g}}/Z_\odot
        &   Z_{\mathrm{g,s}}                        \\
|[empty]|
    &   a\_x_\odot \cdot \frac{Z_{\mathrm{g}}}{Z_\odot}
        &   a\_x_{\mathrm{g,s}}                     \\
\vec{x}_{\mathrm{g}}
    &   (\vec{x}_{\mathrm{g}} -
            \vec{r}_{\mathrm{c,i}}){\cdot}\SI{12000}{\kilo pc}{\cdot} a_{exp}
        &   \vec{x}_{\mathrm{g,s}}                  \\
v_{\mathrm{g}}
    &   |[empty]|
        &   v_{\mathrm{g,s}}                        \\
};
\draw[-{Latex[scale=1.2]}]  (m-3-1) edge    (m-2-3)
                            (m-3-1) edge    (m-3-2)
                            (m-3-2) edge    (m-3-3)

                            (m-4-1) edge    (m-3-2)
                            (m-4-1) edge    (m-4-2)
                            (m-4-1) edge    (m-5-2)
                            (m-4-2) edge    (m-4-3)

                            (m-5-1) edge    (m-4-2)
                            (m-5-1) edge    (m-5-2)
                            (m-5-1) edge    (m-7-2)
                            (m-5-2) edge    (m-5-3)
                            (m-5-3) edge    (m-4-2)
                            (m-5-3) edge    (m-6-2)

                            (m-6-1) edge    (m-6-2)
                            (m-6-2) edge    (m-6-3)

                            (m-7-2) edge    (m-7-3)

                            (m-8-1) edge    (m-8-2)
                            (m-8-1) edge    (m-9-2)
                            (m-8-2) edge    (m-8-3)

                            (m-9-2) edge    (m-9-3)

                            (m-10-1) edge   (m-10-2)
                            (m-10-2) edge   (m-10-3)

                            (m-11-1) edge   (m-11-3)
                           ;
\end{tikzpicture}
    \end{figure}
\end{document}

enter image description here

Zarko
  • 296,517