Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

I am totally new to the package tikz but I am going to make a flow chart for my poster. I used the template provided by this link

I just modify some parts I can understand and the source code is

                % Author: Rasmus Pank Roulund
    \documentclass{minimal}
    \usepackage{tikz}
    \usetikzlibrary{calc,trees,positioning,arrows,chains,shapes.geometric,%
            decorations.pathreplacing,decorations.pathmorphing,shapes,%
            matrix,shapes.symbols}

    \tikzset{
    >=stealth',
        punktchain/.style={
            rectangle, 
            rounded corners, 
            % fill=black!10,
            draw=black, very thick,
            text width=10em, 
            minimum height=3em, 
            text centered, 
            on chain},
        line/.style={draw, 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={->, thick,shorten >=1pt},
        decoration={brace},
        tuborg/.style={decorate},
        tubnode/.style={midway, right=2pt},
    }
    \begin{document}
    \begin{tikzpicture}
        [node distance=.8cm,
        start chain=going below,]
             \node[punktchain, join] (intro) {Raw Signal};
             \node[punktchain, join] (probf)      {Pre-pro1};
             \node[punktchain, join] (investeringer)      {pre-pro2};
             \node[punktchain, join] (perfekt) {feature extract};
             \node[punktchain, join, ] (emperi) {model fitting};

  \node[punktchain, join,] (disk) {training};
        \node[punktchain, join,] (makro) {testing};
        \node (asym) [punktchain ]  {Abnormal};

                \begin{scope}[start branch=venstre,
                    %We need to redefine the join-style to have the -> turn out right
                    every join/.style={-, thick, shorten <=1pt}, ]
                \end{scope}
                \begin{scope}[start branch=hoejre,]
                \node (finans) [punktchain, on chain=going right] {Normal };
             \end{scope}

        % Now that we have finished the main figure let us add some "after-drawings"
        %% First, let us connect (finans) with (disk). We want it to have
        %% square corners.
        %\draw[|-,-|,->, thick,] (finans.south) |-+(0,-1em)-| (disk.north);
        % Now, let us add some braches. 
        %% No. 1

        %% No. 2
        \draw[tuborg, decoration={brace}] let \p1=(disk.north), \p2=(makro.south) in
            ($(2, \y1)$) -- ($(2, \y2)$) node[tubnode] {Classification};
        %% No. 3
        \draw[tuborg, decoration={brace}] let \p1=(perfekt.north), \p2=(emperi.south) in
            ($(2, \y1)$) -- ($(2, \y2)$) node[tubnode] {Feature Selection};
            \draw[tuborg, decoration={brace}] let \p1=(probf.north), \p2=(investeringer.south) in
            ($(2, \y1)$) -- ($(2, \y2)$) node[tubnode] {Data Preprocessing};

        \end{tikzpicture}
    \end{document}
    %%% Local Variables: 
    %%% mode: latex
    %%% TeX-master: t
    %%% End: 

And the output is enter image description here

Here are something I would like;

  1. Centered the two boxes (normal) (abnormal)
  2. Arrows from the upper boxes to (normal) and (abnormal)

  3. Place box (training) and (testing) horizontally without arrow.

  4. Other suggestions make it look professional: like color ...

I draw a picture by hands to make my idea clear. Thanks.

enter image description here

share|improve this question
    
Would you be able to mock up a picture of what you want? Say, using MS Paint? Or even hand-drawn and then scanned in? It would clarify your intentions and make it easier for people to help you. –  John Wickerson May 29 '13 at 5:22
1  
@JohnWickerson Good idea. I made one hand-drawn and hope it helps. –  Lerong May 29 '13 at 6:00
    
I think combining some hints from TikZ arrow positioning and some others from how to draw a process flow figure? you can made it better. If your really want to use chains, then also Draw a multi-chain structure is of help. –  Claudio Fiandrino May 29 '13 at 6:27
    
this example looks quite close to what you want: texample.net/tikz/examples/labs-schema –  Penbeuz May 29 '13 at 9:10
add comment

1 Answer

up vote 10 down vote accepted

I had to do something similar myself so it was a good exercise.

Tikz experts will find more elegant code I'm sure, but based on the example http://www.texample.net/tikz/examples/labs-schema/ this is what I've achieved: enter image description here

\documentclass[11pt]{article}
\usepackage{tikz}
\usetikzlibrary{shadows,arrows,positioning}
% Define the layers to draw the diagram
\pgfdeclarelayer{background}
\pgfdeclarelayer{foreground}
\pgfsetlayers{background,main,foreground}

% Define block styles
\tikzstyle{materia}=[draw, fill=blue!20, text width=6.0em, text centered,
  minimum height=1.5em,drop shadow]
\tikzstyle{etape} = [materia, text width=8em, minimum width=10em,
  minimum height=3em, rounded corners, drop shadow]
\tikzstyle{texto} = [above, text width=6em, text centered]
\tikzstyle{linepart} = [draw, thick, color=black!50, -latex', dashed]
\tikzstyle{line} = [draw, thick, color=black!50, -latex']
\tikzstyle{ur}=[draw, text centered, minimum height=0.01em]

% Define distances for bordering
\newcommand{\blockdist}{1.3}
\newcommand{\edgedist}{1.5}

\newcommand{\etape}[2]{node (p#1) [etape]
  {#2}}

% Draw background
\newcommand{\background}[5]{%
  \begin{pgfonlayer}{background}
    % Left-top corner of the background rectangle
    \path (#1.west |- #2.north)+(-0.5,0.25) node (a1) {};
    % Right-bottom corner of the background rectanle
    \path (#3.east |- #4.south)+(+0.5,-0.25) node (a2) {};
    % Draw the background
    \path[fill=yellow!20,rounded corners, draw=black!50, dashed]
      (a1) rectangle (a2);
      \path (#3.east |- #2.north)+(0,0.25)--(#1.west |- #2.north) node[midway] (#5-n) {};
      \path (#3.east |- #2.south)+(0,-0.35)--(#1.west |- #2.south) node[midway] (#5-s) {};
      \path (#3.east |- #2.north)+(0.7,0)--(#3.east |- #4.south) node[midway] (#5-w) {};
  \end{pgfonlayer}}

\newcommand{\transreceptor}[3]{%
  \path [linepart] (#1.east) -- node [above]
    {\scriptsize #2} (#3);}

\begin{document}
\begin{tikzpicture}[scale=0.7,transform shape]

  % Draw diagram elements
  \path \etape{1}{Raw signal};

  \path (p1.south)+(0.0,-1.5) \etape{2}{Pre-1};
  \path (p2.south)+(0.0,-1.0) \etape{3}{Pre-2};

  \path (p3.south)+(0.0,-1.5) \etape{4}{Feature extract};
  \path (p4.south)+(0.0,-1.0) \etape{5}{Model fitting};

  \path (p5.south)+(-3.0,-2.0) \etape{6}{training};
  \path (p5.south)+(3.0,-2.0) \etape{7}{testing};
  \node [below=of p5] (p6-7) {};

  \path (p6.south)+(0.0,-2.0) \etape{8}{normal};
  \path (p7.south)+(0.0,-2.0) \etape{9}{abnormal};
  \node [below=of p6-7] (p8-9) {};

  % Draw arrows between elements
  \path [line] (p1.south) -- node [above] {} (p2);
  \path [line] (p2.south) -- node [above] {} (p3);
  \path [line] (p3.south) -- node [above] {} (p4);
  \path [line] (p4.south) -- node [above] {} (p5);

  \background{p2}{p2}{p3}{p3}{bk1}
  \background{p4}{p4}{p5}{p5}{bk2}
  \background{p6}{p6}{p7}{p7}{bk3}

  \path [line] (p5.south) -- node [above] {} (bk3-n);
  \path [line] (bk3-s) -- node [above] {} (p8);
  \path [line] (bk3-s) -- node [above] {} (p9);
  \path (bk1-w)+(+6.0,0) node (ur1)[ur] {};
  \path (bk2-w)+(+6.0,0) node (ur2)[ur] {};
  \path (bk3-w)+(+3.0,0) node (ur3)[ur] {};
  \transreceptor{bk1-w}{pre processing}{ur1};
  \transreceptor{bk2-w}{Feature selection}{ur2};
  \transreceptor{bk3-w}{classification}{ur3};
\end{tikzpicture}
\end{document}
share|improve this answer
    
Thanks @penbeuz. Love it –  Lerong May 29 '13 at 14:21
    
Can I drop the small squares on the right and make the dashed arrows to be dashed lines. –  Lerong May 29 '13 at 15:04
1  
sure, just drop the ur in \path (bk1-w)+(+6.0,0) node (ur1)[ur] {}; replace by \path (bk1-w)+(+6.0,0) node (ur1)[] {}; this is the node decoration. don't understand what you mean with dashed arrow. –  Penbeuz May 29 '13 at 15:12
    
You can also have the text at the end of arrow by \path (bk1-w)+(+6.0,0) node (ur1)[] {Pre process}; an remove the other text. –  Penbeuz May 29 '13 at 15:16
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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