1

I have the following chart in tikz, but I'd like to adjust some problems with the arrows:

  • I changed the arrow thickness proportionally to the number in the edge, but the arrow head should be according to the arrow thickness. How can I do that?
  • The other end of the arrows should start from under the nodes

How should I proceed?

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric, shapes.arrows, arrows, chains, positioning, automata, backgrounds,patterns,fit,petri,arrows.meta,calc}
\begin{document}
\begin{figure}[htb]
  \centering
  \label{fig:order}
\footnotesize
\begin{tikzpicture}[align=center,initial text = {},node distance=1cm and 1cm,every edge/.style={thick,draw}]
  \tikzstyle{place}=[shape=rectangle, rounded corners, align=center,draw=black,fill=black!5]
    \node [place,initial,minimum height=1cm] (start) {Start};
    \node [place,right=of start] (extraction) {Extraction};
    \node [place,right=of extraction] (evaluation) {Evaluation};
    \node [place,right=of evaluation, yshift=1cm] (filtering) {Filtering};
    \node [place,above=of filtering] (enrichment) {Correction/\\enrichment};
    \node [place,right=of filtering, yshift=1cm] (enrichment2) {Correction/\\enrichment};
    \node [place,below=of enrichment2] (evalcorrec) {Evaluation and\\correction/\\enrichment};
    \node [place,below=of evalcorrec] (concurrently) {Filtering and\\ correction/\\enrichment};

    \node [place,above=of enrichment2] (filtering2) {Filtering};
    \node [place,accepting,right=of evalcorrec,minimum height=8cm] (end) {end};
    
    
    \path(filtering2)-|node (f2_end) {}(end.west);
    \path(enrichment)-|node (e_end) {}(end.west);
    \path(enrichment2)-|node (e2_end) {}(end.west);
    \path(filtering)-|node (f_end) {}(end.west);
    \path(concurrently)-|node (c_end) {}(end.west);
    
    
    \draw[-{Latex[length=2.15mm]}] (start) edge[line width=6.125mm] node[above] {125}(extraction);
    \draw[-{Latex[length=2.15mm]}] (extraction) edge[line width=4.1mm] node[above] {82}(evaluation) edge[bend right, line width=2.15mm] node[below] {43}(end.south west);
    \draw[-{Latex[length=2mm]}] (evaluation) edge[line width=1.05mm] node[above] {21}(filtering) edge[bend right,line width=.5mm] node[above] {10}($(end.west)+(0,-3)$) edge[line width=2.45mm] node[above] {49}(enrichment) edge[line width=0.1mm] node[above] {2}(concurrently);
    \draw[-{Latex[length=2mm]}] (enrichment) edge[line width=0.05mm] node[above] {1}(filtering2) edge[line width=2.4mm] node[above] {48}(e_end);
    
    \draw[-{Latex[length=2mm]}] (concurrently) edge[line width=0.1mm] node[above] {2}(c_end);
    \draw[-{Latex[length=2mm]}] (filtering) edge[line width=0.2mm] node[above] {4}(enrichment2) edge[line width=0.05mm] node[above] {1}(evalcorrec) edge[line width=0.8mm] node[above] {16}(f_end);
    
    \draw[-{Latex[length=2mm]}] (filtering2) edge[line width=0.05mm] node[above] {1}(f2_end);
    \draw[-{Latex[length=2mm]}] (enrichment2) edge[line width=0.2mm] node[above] {4}(e2_end);
    \draw[-{Latex[length=2mm]}] (evalcorrec) edge[line width=0.05mm] node[above] {1}(end.west);
\end{tikzpicture}
\end{figure}
\end{document}

example

1
  • You don't need to load both arrows and arrows.meta to draw arrows. The latter in enough and is the prefered one, nowadays. You'll have to look for some explanations on how to use it but it's very versatile. See a full answer and links here.
    – SebGlav
    Sep 22 '21 at 11:57
0

You can add a line width factor to the arrow length for example Latex[length=2.15mm 1]. I have tried a factor of 1 which you may adapt for your needs:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric, shapes.arrows, arrows, chains, positioning, automata, backgrounds,patterns,fit,petri,arrows.meta,calc}
\begin{document}
\begin{figure}[htb]
  \centering
  \label{fig:order}
\footnotesize
\begin{tikzpicture}[align=center,initial text = {},node distance=1cm and 1cm,every edge/.style={thick,draw}]
  \tikzstyle{place}=[shape=rectangle, rounded corners, align=center,draw=black,fill=black!5]
    \node [place,initial,minimum height=1cm] (start) {Start};
    \node [place,right=of start] (extraction) {Extraction};
    \node [place,right=of extraction] (evaluation) {Evaluation};
    \node [place,right=of evaluation, yshift=1cm] (filtering) {Filtering};
    \node [place,above=of filtering] (enrichment) {Correction/\\enrichment};
    \node [place,right=of filtering, yshift=1cm] (enrichment2) {Correction/\\enrichment};
    \node [place,below=of enrichment2] (evalcorrec) {Evaluation and\\correction/\\enrichment};
    \node [place,below=of evalcorrec] (concurrently) {Filtering and\\ correction/\\enrichment};

    \node [place,above=of enrichment2] (filtering2) {Filtering};
    \node [place,accepting,right=of evalcorrec,minimum height=8cm] (end) {end};
    
    
    \path(filtering2)-|node (f2_end) {}(end.west);
    \path(enrichment)-|node (e_end) {}(end.west);
    \path(enrichment2)-|node (e2_end) {}(end.west);
    \path(filtering)-|node (f_end) {}(end.west);
    \path(concurrently)-|node (c_end) {}(end.west);
    
    
    \draw[-{Latex[length=2.15mm 1]}] (start) edge[line width=6.125mm] node[above] {125}(extraction);
    \draw[-{Latex[length=2.15mm 1]}] (extraction) edge[line width=4.1mm] node[above] {82}(evaluation) edge[bend right, line width=2.15mm] node[below] {43}(end.south west);
    \draw[-{Latex[length=2mm 1]}] (evaluation) edge[line width=1.05mm] node[above] {21}(filtering) edge[bend right,line width=.5mm] node[above] {10}($(end.west)+(0,-3)$) edge[line width=2.45mm] node[above] {49}(enrichment) edge[line width=0.1mm] node[above] {2}(concurrently);
    \draw[-{Latex[length=2mm 1]}] (enrichment) edge[line width=0.05mm] node[above] {1}(filtering2) edge[line width=2.4mm] node[above] {48}(e_end);
    
    \draw[-{Latex[length=2mm 1]}] (concurrently) edge[line width=0.1mm] node[above] {2}(c_end);
    \draw[-{Latex[length=2mm 1]}] (filtering) edge[line width=0.2mm] node[above] {4}(enrichment2) edge[line width=0.05mm] node[above] {1}(evalcorrec) edge[line width=0.8mm] node[above] {16}(f_end);
    
    \draw[-{Latex[length=2mm 1]}] (filtering2) edge[line width=0.05mm] node[above] {1}(f2_end);
    \draw[-{Latex[length=2mm 1]}] (enrichment2) edge[line width=0.2mm] node[above] {4}(e2_end);
    \draw[-{Latex[length=2mm 1]}] (evalcorrec) edge[line width=0.05mm] node[above] {1}(end.west);
\end{tikzpicture}
\end{figure}
\end{document}

enter image description here

2
  • Thanks for your response. What about the other end. I'd like to avoid the overlapping of the arrow and the node (like in evaluation and extraction) Sep 24 '21 at 17:02
  • @LuizFernandoPuttowSouthier . You can set some white space around nodes with the use of out sep=<some distance> option. Sep 24 '21 at 20:31

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.