3

I have update the example code with some of the comments to get really close to what I want. Now I just want two lines coming out of filter 1 and filter 2 inline and with the same line style as already there for the smaller blocks. I assume this should be relatively easy but I can only figure out how to get the lines out of the center of the block.

\makeatletter
\tikzset{west above/.code=\tikz@lib@place@handle@{#1}{south west}{0}{1}{north west}{1}}
\tikzset{west below/.code=\tikz@lib@place@handle@{#1}{north west}{0}{-1}{south west}{1}}
\tikzset{east above/.code=\tikz@lib@place@handle@{#1}{south east}{0}{1}{north east}{1}}
\tikzset{east below/.code=\tikz@lib@place@handle@{#1}{north east}{0}{-1}{south east}{1}}
\makeatother
\fontsize{8pt}{9pt}\selectfont
\begin{tikzpicture}[
  every node/.style={
    rectangle, 
    rounded corners, 
    % fill=black!10,
    draw=black, very thick,
    minimum height=2em, 
    inner sep=2pt,
    text centered, 
    align=center
  },
  big node/.style={text width=8cm},
  small node/.style={text width=3.5cm},
  >=latex, %Make the arrow tips latex
  myline/.style={draw, very thick,black, <-, node distance=1.1cm},
  mylinedot/.style={draw, very thick, blue!100!black!70, densely dotted, <-, node distance=1cm},
  shorter/.style={shorten <=1mm,shorten >=0.5mm},
  node distance=0.75cm,
  |*/.style={to path=(\tikztostart.south) -- (\tikztostart.south|-\tikztotarget.north)},
  *|/.style={to path=(\tikztostart.south-|\tikztotarget.north) -- (\tikztotarget.north)}
  ]
\begin{scope}[every node/.append style={big node}]
  \node (B) {\textbf{Filter process 1}};
  \node[below=of B] (C) {\textbf{Filter process 2}};
  \node[below=of C] (D) {\textbf{Filter process 3}};
\end{scope}
\begin{scope}[every node/.append style={small node}]
  \node[west above=of B] (A1) {\textsc{Training Waveform}};
  \node[east above=of B] (A2) {\textsc{Testing Waveform}};

  \node[west below=of D] (E1) {\textbf{Reduced Model}};
  \node[east below=of D] (E2) {\textbf{Full Model}};

\end{scope}
% \path (A1) -- node[F5 node] {F5} (A2);

\path[myline,->,shorter]  {[|*] (A1) edge (B)}
                                (B)  edge (C)
                                (C)  edge (D)
                          {[*|] (D)  edge (E1)}
                         ;
\path[mylinedot,->,shorter]  {[|*] (A2) edge (B) }
                          {[*|] (D) edge (E2)}
                          (E1) edge (E2)
                         ;
\end{tikzpicture}

Flow Diagram

This is the final solution but I get a miscellaneous arrow that I am not sure how to get rid of. All I did was change to the two path lines below from the above code with no other changes.

Code is here:

\path[myline,->,shorter]  {[|*] (A1) edge (B)}
                              ([shift={(-2.25cm,0)}]B.south)  edge ([shift={(-2.25cm,0)}]C.north)
                              ([shift={(-2.25cm,0)}]C.south)  edge ([shift={(-2.25cm,0)}]D.north)
                          {[*|] (D)  edge (E1)}
                         ;
\path[mylinedot,->,shorter]  {[|*] (A2) edge (B) }
                              ([shift={(2.25cm,0)}]B.south)  edge ([shift={(2.25cm,0)}]C.north)
                              ([shift={(2.25cm,0)}]C.south)  edge ([shift={(2.25cm,0)}]D.north)
                          {[*|] (D) edge (E2)}
                          (E1) edge (E2)
                         ;

Flow Diagram2

J Spen
  • 785

2 Answers2

2

Is this what you seek? Basically the in/out angle options for edge [in=..., out=...] are removed and the connected lines/pathes between blocks are not centered, but moved aside, so that train path and test path are clearly seen.

enter image description here

Code:

\documentclass{article}
\usepackage{tikz}
\usepackage[papersize={14cm,14cm}]{geometry}
\usetikzlibrary{chains,shapes.arrows, arrows, positioning}

\begin{document}
\tikzset{>=stealth',
    punktchain/.style={rectangle, rounded corners, 
    % fill=black!10,
    draw=black, very thick,
    inner sep=2pt, text width=3.1cm, minimum height=3em, 
    text centered, on chain},
  connector/.style = {->,very thick},
  punktchain1/.style={ rectangle,  rounded corners, 
    % fill=black!10,
    draw=black, very thick,
    inner sep=2pt,text width=3.2cm,  minimum height=3em, 
    text centered,  on chain},
  line/.style={draw, very thick, <-},
  element/.style={tape,top color=white,
    bottom color=blue!50!black!60!,
    minimum width=8em, draw=blue!40!black!90, very thick,
    text width=10em,  minimum height=3.5em, 
    text centered,  on chain},
  every join/.style={->, very thick, shorten >=1pt},    
  %decoration={brace, segment length=10pt, amplitude=7pt},
  tuborg/.style={decorate, very thick},
  tubnode/.style={midway, right=5pt}
}

\begin{figure}
\centering
\small % \fontsize{8pt}{9pt}\selectfont
\begin{tikzpicture} [auto, >=stealth',  node distance=1cm,  start chain=going below]

\node[punktchain ] (A1) {\textsc{Train Path}};

\node[punktchain, right = 0.7cm of A1] (B1) { \textsc{Test Path}};

\node[punktchain, text width = 7cm, below = of A1, xshift=2cm] (A2)  {
    \begin{tabular}{c}
    \textbf{Step 1} \\
    \parbox{6cm}{  $\bullet$ Bullet 1 \\ $\bullet$ Bullet 2}
    \end{tabular}
    };
     \path [connector] (A1)  edge   (A2);    
     \path [connector, densely dotted] (B1.south) edge (A2);    
%     \path \[line, densely dotted\]<3-3> (A4) edge \[out=0, in=184\] (pic);
%     \node\[punktchain, join\] (A22) {\textbf{Rectify and Integrate} \\ \vspace{} ($10$ms windows)};
     \node[punktchain, text width = 7cm] (A3) {\textbf{Step 2}};
     \path [connector, densely dotted] ([shift={(1cm,0)}]A2.south) edge ([shift={(1cm,0)}]A3.north);   
\path [connector, very thick] ([shift={(-1cm,0)}]A2.south) edge ([shift={(-1cm,0)}]A3.north);  
     \node[punktchain, text width = 7cm] (A4) {
        \begin{tabular}{c}
          \textbf{Step 3} \\
          \parbox{6.5cm}{Something written here}
        \end{tabular}};
     \path [connector, densely dotted] ([shift={(1cm,0)}]A3.south) edge ([shift={(1cm,0)}]A4.north);    
\path [connector, very thick] ([shift={(-1cm,0)}]A3.south) edge ([shift={(-1cm,0)}]A4.north);    
     \node[punktchain,  below= of A4, xshift=-2cm] (A6) {\textbf{Final Store}}; 
     \node[punktchain, below= of A4, xshift=2cm] (A8) {\textbf{Compare} }; 
     \path [connector, densely dotted] (A6) edge  (A8);    
     \path [connector, densely dotted] (A4) edge  (A8);    
     \path  [connector] (A4)  edge   (A6);    
\end{tikzpicture}
\end{figure}
\end{document}

Updated: The OP has an updated version. Actually, the answer addressed above still covers the new post's need. By using the shift={(x,y)} skill, the expected result is achievable.

enter image description here

Code:

\documentclass{article}
\usepackage{tikz}
\usepackage[papersize={14cm,14cm}]{geometry}
\usetikzlibrary{chains,shapes.arrows, arrows, positioning, fadings,decorations}

\begin{document}
\tikzset{>=stealth',
    punktchain/.style={rectangle, rounded corners, 
    % fill=black!10,
    draw=black, very thick,
    inner sep=2pt, text width=3.1cm, minimum height=3em, 
    text centered, on chain},
  connector/.style = {->,very thick},
  punktchain1/.style={ rectangle,  rounded corners, 
    % fill=black!10,
    draw=black, very thick,
    inner sep=2pt,text width=3.2cm,  minimum height=3em, 
    text centered,  on chain},
  line/.style={draw, very thick, <-},
  element/.style={tape,top color=white,
    bottom color=blue!50!black!60!,
    minimum width=8em, draw=blue!40!black!90, very thick,
    text width=10em,  minimum height=3.5em, 
    text centered,  on chain},
  every join/.style={->, very thick, shorten >=1pt},    
     %decoration={brace, segment length=10pt, amplitude=7pt},
  tuborg/.style={decorate, very thick},
  tubnode/.style={midway, right=5pt}
}

\begin{figure}
\centering
\small % \fontsize{8pt}{9pt}\selectfont
\begin{tikzpicture} [auto, >=stealth',  node distance=1cm,  start chain=going below]

\node[punktchain ] (A1) {\textsc{Train Path}};

\node[punktchain, right = 0.7cm of A1] (B1) { \textsc{Test Path}};

\node[punktchain, text width = 7cm, below = of A1, xshift=2cm] (A2)  {
    \begin{tabular}{c}
    \textbf{Step 1} \\
    \parbox{6cm}{  $\bullet$ Bullet 1 \\ $\bullet$ Bullet 2}
    \end{tabular}
    };
     \path [connector] (A1.south)  edge   ([shift={(-2cm,0)}]A2.north);    
     \path [connector, densely dotted] (B1.south) edge   ([shift={(2cm,0)}]A2.north);    
%     \path \[line, densely dotted\]<3-3> (A4) edge \[out=0, in=184\] (pic);
%     \node\[punktchain, join\] (A22) {\textbf{Rectify and Integrate} \\ \vspace{} ($10$ms windows)};
     \node[punktchain, text width = 7cm] (A3) {\textbf{Step 2}};
     \path [connector, densely dotted] ([shift={(2cm,0)}]A2.south)   edge   ([shift={(2cm,0)}]A3.north);   
\path [connector, very thick] ([shift={(-2cm,0)}]A2.south)   edge   ([shift={(-2cm,0)}]A3.north);  
     \node[punktchain, text width = 7cm] (A4) {
        \begin{tabular}{c}
         \textbf{Step 3} \\
          \parbox{6.5cm}{Something written here}
    \end{tabular}};
     \path [connector, densely dotted] ([shift={(2cm,0)}]A3.south)   edge   ([shift={(2cm,0)}]A4.north);    
\path [connector, very thick] ([shift={(-2cm,0)}]A3.south)   edge   ([shift={(-2cm,0)}]A4.north);    
     \node[punktchain,  below= of A4, xshift=-2cm] (A6) {\textbf{Final Store}}; 
     \node[punktchain, below= of A4, xshift=2cm] (A8) {\textbf{Compare} }; 
     \path [connector, densely dotted] (A6) edge  (A8);    
     \path [connector, densely dotted] ([shift={(2cm,0)}]A4.south) edge  (A8.north);    
    \path  [connector] ([shift={(-2cm,0)}]A4.south)  edge   (A6.north);    
\end{tikzpicture}
\end{figure}
\end{document}
David Carlisle
  • 757,742
Jesse
  • 29,686
  • That is close to what I want. I was also working on an example from the links provided in the post and I posted the edited solution. I still don't know how to get straight lines down as desired which you have in this example. If you know how to get straight lines down from my posted example since you have done that here just post that and I will accept the answer. Or I can try to figure it out from your code. – J Spen Nov 03 '13 at 09:02
  • @JSpen -- I just leave a message in your post, specific lines are mentioned to you for your reference. Yes, I believe you are very close to your solution. – Jesse Nov 03 '13 at 09:11
  • Thanks because the shift works well but get extra arrows in my code that when I pasted yours I did not get. – J Spen Nov 03 '13 at 09:38
2

Too long for a comment.

You are defining

myline/.style={draw, very thick,black, <-, node distance=1.1cm},
mylinedot/.style={draw, very thick, blue!100!black!70, densely dotted, <-, node distance=1cm},

i.e, to have arrow head backwards. And in your \path command, you are using -> arrows in the forward direction. Remove -> from the definition of myline/.style and mylinedot/.style and use -> as an option to every edge like edge[->]. i.e.,

\path[myline,,shorter]  {[|*] (A1) edge[->] (B)}
                              ([shift={(-2.25cm,0)}]B.south)  edge[->] ([shift={(-2.25cm,0)}]C.north)
                              ([shift={(-2.25cm,0)}]C.south)  edge[->] ([shift={(-2.25cm,0)}]D.north)
                          {[*|] (D)  edge[->] (E1)}
                         ;
\path[mylinedot,shorter]  {[|*] (A2) edge[->] (B) }
                             ([shift={(2.25cm,0)}]B.south)  edge[->] ([shift={(2.25cm,0)}]C.north)
                              ([shift={(2.25cm,0)}]C.south)  edge[->] ([shift={(2.25cm,0)}]D.north)
                          {[*|] (D) edge[->] (E2)}
                          (E1) edge[->] (E2)
                         ;

Full code:

\documentclass{article}
\usepackage{tikz}
\usepackage[papersize={14cm,14cm}]{geometry}
\usetikzlibrary{chains,shapes.arrows, arrows, positioning}
\makeatletter
\tikzset{west above/.code=\tikz@lib@place@handle@{#1}{south west}{0}{1}{north west}{1}}
\tikzset{west below/.code=\tikz@lib@place@handle@{#1}{north west}{0}{-1}{south west}{1}}
\tikzset{east above/.code=\tikz@lib@place@handle@{#1}{south east}{0}{1}{north east}{1}}
\tikzset{east below/.code=\tikz@lib@place@handle@{#1}{north east}{0}{-1}{south east}{1}}
\makeatother

\begin{document}
\fontsize{8pt}{9pt}\selectfont
\begin{tikzpicture}[
  every node/.style={
    rectangle,
    rounded corners,
    % fill=black!10,
    draw=black, very thick,
    minimum height=2em,
    inner sep=2pt,
    text centered,
    align=center
  },
  big node/.style={text width=8cm},
  small node/.style={text width=3.5cm},
  >=latex, %Make the arrow tips latex
  myline/.style={draw, very thick,black, node distance=1.1cm},
  mylinedot/.style={draw, very thick, blue!100!black!70, densely dotted,  node distance=1cm},
  shorter/.style={shorten <=1mm,shorten >=0.5mm},
  node distance=0.75cm,
  |*/.style={to path=(\tikztostart.south) -- (\tikztostart.south|-\tikztotarget.north)},
  *|/.style={to path=(\tikztostart.south-|\tikztotarget.north) -- (\tikztotarget.north)}
  ]
\begin{scope}[every node/.append style={big node}]
  \node (B) {\textbf{Filter process 1}};
  \node[below=of B] (C) {\textbf{Filter process 2}};
  \node[below=of C] (D) {\textbf{Filter process 3}};
\end{scope}
\begin{scope}[every node/.append style={small node}]
  \node[west above=of B] (A1) {\textsc{Training Waveform}};
  \node[east above=of B] (A2) {\textsc{Testing Waveform}};

  \node[west below=of D] (E1) {\textbf{Reduced Model}};
  \node[east below=of D] (E2) {\textbf{Full Model}};

\end{scope}
\path[myline,,shorter]  {[|*] (A1) edge[->] (B)}
                              ([shift={(-2.25cm,0)}]B.south)  edge[->] ([shift={(-2.25cm,0)}]C.north)
                              ([shift={(-2.25cm,0)}]C.south)  edge[->] ([shift={(-2.25cm,0)}]D.north)
                          {[*|] (D)  edge[->] (E1)}
                         ;
\path[mylinedot,shorter]  {[|*] (A2) edge[->] (B) }
                             ([shift={(2.25cm,0)}]B.south)  edge[->] ([shift={(2.25cm,0)}]C.north)
                              ([shift={(2.25cm,0)}]C.south)  edge[->] ([shift={(2.25cm,0)}]D.north)
                          {[*|] (D) edge[->] (E2)}
                          (E1) edge[->] (E2)
                         ;
\end{tikzpicture}
\end{document}

enter image description here

  • Thanks that worked. I had already modified the code similarly so I used a different path command for the large blocks which also worked from Jesse suggestion. – J Spen Nov 04 '13 at 02:33