8

I have big problems to get model of evolution. I do not even know how to start. enter image description here

If some one show the sample code of something similar, I would be grateful

\documentclass{minimal}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{tikz}
\usetikzlibrary{calc,trees,positioning,arrows,chains,shapes.geometric,%
  decorations.pathreplacing,decorations.pathmorphing,shapes,%
  matrix,shapes.symbols}
\usetikzlibrary{decorations.pathmorphing,shadows} 
\usepackage{xcolor}
\tikzset{
  W/.style={
    rectangle, 
    rounded corners=4pt, 
    draw=black, thin,
    text width=10em, 
    minimum height=3em, 
    text badly centered, },
  P/.style={
    circle, 
    draw=blue!50!black!50,
    top color=white,
    bottom color=blue!60!black!10,
    inner sep=5pt,
    text width=1.75cm,
    text badly centered,
    minimum height=3em,
  }
}
\definecolor{vert}{rgb}{0.15 0.4 0.1}
\definecolor{bleu}{rgb}{0.39, 0.58, 0.93}

\begin{document}

\begin{tikzpicture}

  \node[P] (p) {P};
  \node[W, below= 3cm of p](w) {W};

  \draw[transform canvas={xshift=2ex},->] (p.south) --  ++(0,0) -|     (w.north);
  \draw[transform canvas={xshift=-2ex},->] (w.north) -- ++(0,0) -|  (p.south);
  \draw[->, dashed,transform canvas={xshift=-2ex},very thick] (w.north) -- ++(0,0) -|  (p.south);
\end{tikzpicture}
\\
\begin{tikzpicture}
  \node[at={(0,0)},text=bleu]{\bfseries Objaśnienia};
  \node[at={(0,0)},above,yscale=-1,scope fading=south,
  opacity=0.5,text=bleu]{\bfseries Objaśnienia};
\end{tikzpicture}
\begin{itemize}
\item[] \tikz {\path[circle, top color=white,
    bottom color=blue!60!black!10,] 
    (0,0) -- (1,0) node[above,pos=0.5,text=vert] {P};} -- frakcja populacji P, która się adaptuje

\item[] \tikz {\path[line width=2pt,->,dashed] 
    (0,0) -- (1,0) node[above,pos=0.5,text=violet] {W};} some text,
  $S_i\,\longrightarrow\,T_j$ non radiative transition.


\end{itemize}
\end{document}

enter image description here

1 Answers1

12

The way to do this is like almost any other piece of software, break it down into its components.

Major Components:

First is the circle, which is pretty easy:

\draw (0,0) circle (1cm) node {\Huge P};

But since we are going to be interconnecting them, perhaps a node would be better:

\node [draw=black, circle] at (0cm,0cm) {\Huge P};

enter image description here

Oh, and might as well name this node (MyCircle), and perhaps add some inner sep to make the circle larger:

\node [draw=black, circle, inner sep=0.25cm] (MyCircle)  {\Huge P};

enter image description here

The shading is a detail that can be addressed later. The rectangle can be draw similarly:

\node [draw=black, rectangle, inner sep=0.25cm] (MySquare) at (0cm,-2cm) {\Huge W};

enter image description here

Perhaps we should add some more space between the circle and square by moving it lower:

\node [draw=black, rectangle, inner sep=0.25cm] (MySquare) at (0cm,-3cm) {\Huge W};

Now we can draw the vertical lines connecting the two nodes (thanks percusse):

\draw [red,  ->] (MyCircle.-115) -| (MySquare.120);
\draw [blue, ->] (MySquare.55)   -| (MyCircle.-60);

which yields:

enter image description here

Ok, so now you have the main components of the diagram:

\begin{tikzpicture}[thick]
    \node [draw=black, circle,    inner sep=0.25cm] (MyCircle) at (0cm,0cm)  {\Huge P};
    \node [draw=black, rectangle, inner sep=0.25cm] (MySquare) at (0cm,-3cm) {\Huge W};

    \draw [red,  ->] (MyCircle.-115) -| (MySquare.120);
    \draw [blue, ->] (MySquare.55)   -| (MyCircle.-60);
\end{tikzpicture}

Horizontal Lines

Since there is quite a bit of repetition going on with the horizontal arrows, I'd use a \foreach loop to iterate over them. Need to decide how far apart you want them. So something like:

\foreach \y in {-1,-1.25,...,-3.0} {%
    \draw [brown,-latex] (1,\y) -- (0,\y);
}%

where I changed the arrow style to -latex which yields:

enter image description here

Now we can draw the arrows on the left going the other way:

\foreach \y in {-1,-1.5,...,-3.0} {%
    \draw [violet,-latex] (-1,\y) -- (0,\y);
}%

enter image description here

If you want more of the brown arrows, we need to reduce the spacing in between them. So something like:

\foreach \y in {-1,-1.167,...,-3.167} {%
    \draw [brown,-latex] (1,\y) -- (0,\y);
}%

\foreach \y in {-1,-1.5,...,-3.0} {%
    \draw [violet,-latex] (-1,\y) -- (0,\y); 
}%

enter image description here

Now to add the numbers on the left hand side we can use a node at the midway part of the line, and above it. We can use the [count=\i] to automatically determine the value to be placed above it. So, with:

\begin{tikzpicture}[thick]
\foreach \y in {-1,-1.167,...,-3.167} {%
    \draw [brown,-latex] (1,\y) -- (0,\y);
}%

\foreach [count=\i] \y in {-1,-1.5,...,-3.0} {%
    \draw [violet,-latex] (-1,\y) -- (0,\y)
        node [midway, above] {\i};
}%
\end{tikzpicture}

we get:

enter image description here

Now just need to find a method to convert these to roman numbers.

Putting these pieces into one figure should get you quite far along to the final drawing.

Braces:

To draw the braces you should refer to Adding a large brace next to a body of text, or perhaps the numerous answers I have posted here using \tkzmark.

Peter Grill
  • 223,288