5

Any advice on how to draw this generic graph? I said "generic" because is not based on any data, so apparently there are no references nor coordinates.

wanted

This is as far as I can go:

\documentclass{standalone}
    \usepackage{tikz}
    \usetikzlibrary{patterns,hobby}
    \usepackage{pgfplots}
    \pgfplotsset{compat=1.6}
    \begin{document}
    \begin{tikzpicture}

    \begin{axis}[
        xmin=-0,xmax=7,
        xlabel={z},
        ymin=0,ymax=4.5,
    xtick={2,4.5,6},
    xticklabels={$t$,$t+dt$,$n$},
    ytick={3.5},
    yticklabels={$V(x)$},
    xlabel={},  
    ylabel={},
    axis lines=middle] 
\draw [color=black,fill=white,thick,solid] (axis cs:0,0) rectangle (axis cs:6,3.5);
\draw [color=black,fill=white,thick,solid] (axis cs:0,0) rectangle (axis cs:2,3.5);
\addplot+[black,thick,domain=0:7,no marks] {0};
%
\node  at (axis cs:2.5,0)    [anchor=south west] {$$};
\node  at (axis cs:4,0)      [anchor=south west] {$$};
\node  at (axis cs:2.8,2.2)  [anchor=north]      {$$};
\node  at (axis cs:4.2,4)   [anchor=north]       {$$};
\node  at (axis cs:0.25,2.5) [anchor=north]      {$$};
\node  at (axis cs:0.25,4)   [anchor=north]      {$$};
\node at (axis cs:0,0)     [anchor=south west]  {$$};
%
\end{axis} 
\end{tikzpicture}
\end{document}

output

3
  • 2
    It is very straightforward, you could start by defining all relevant coordinates on the drawing and then draw some lines and a few arrows.
    – daleif
    Commented May 3, 2016 at 16:44
  • here's starting point perhaps: tex.stackexchange.com/questions/160237/…
    – Thruston
    Commented May 3, 2016 at 17:20
  • compat=1.6, really? The latest version of pgfplots is 1.13. Commented May 3, 2016 at 19:06

4 Answers 4

2

An alternative, pure TikZ solution:

\documentclass[tikz,border=3mm,preview]{standalone}
    \usetikzlibrary{arrows.meta,positioning,quotes}

\begin{document}
    \begin{tikzpicture}[
    >={Triangle[]}
                        ]
% coordinate
\draw[->] (-0.1,0) node[below left] {0}
                   -- (9,0);
\draw[->] (0,-0.1) -- (0,6);
% horizontal line
\draw   (-0.1,4) node[left] {$V(x,0)$} -- + (9,0); 
% vertical lines
\draw   (2,4) node[above left] {$V(x,t)$}
              node[below left] {$P(x,t)\mathrm{d}t$}
              -- + (0,-4.1)
              node[below] {$t$};
\draw   (5,4) node[above right] {$V(x,t+\mathrm{d}t)$}
              -- + (0,-4.1)
              node[below] {$t+\mathrm{d}t)$};
\draw   (8,4) node[above] {$V(x,n)$}
              -- + (0,-4.1)
              node[below] {$n$};
% vectors
\path[draw=red, fill=red, ultra thick, ->]
        (2,4) edge["$\displaystyle
                    1-\sum_{j=1}^{k}\mu_{x+t}^{(j)}\mathrm{d}t$"]   + (3, 0)
        (2,4) to [pos=0.7,sloped,"$\displaystyle
                    \mu_{x+t}^{(j)}\mathrm{d}t$" ']                 + (3,-2);
    \end{tikzpicture}
\end{document}

enter image description here

1
  • Great. It's the way I need. The detail of the sloped formula is superb. Thanks a lot!!
    – José
    Commented May 4, 2016 at 6:38
3

Another way with TikZ. I like to separate the labels from the drawings.

\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\usepackage{amsmath}
\begin{document}
\begin{tikzpicture}[axis/.style={thick,-stealth},
                    vector/.style={ultra thick,-latex}
]
% drawing
\draw [axis] (0,0) -- (13,0);
\draw [axis] (0,0) -- (0,6);
\draw[thick] (0,4)  -- (13,4);
\foreach \i in {1,2,3}{%
    \draw[thick] (4*\i,0) -- (4*\i,4);
    }
\draw [vector] (4,4) --  (8,4);
\draw [vector] (4,4) --  (8,4/3) coordinate[midway](mi) coordinate(e);
% the labels
\foreach \i/\l/\a in {  0/{V(x,0)}/left,
                        1/{V(x,t)}/left,
                        2/{V(x,t+dt)}/right,
                        3/{V(x,n)}/left}{%
                                        \node[above \a] at (4*\i,4) {$\l$};
    }
\foreach \i/\l in { 0/0,
                    1/t,
                    2/t+dt,
                    3/n}{%
                        \node[below] at ((4*\i,0) {$\l$};)
    }
\node[above=8pt] at (6,4) {%
    $\displaystyle 1-\sum_{j=1}^{k}\mu_{x+t}^{(j)}\,dt$};
\node[below left] at (mi) {$\mu_{x+t}^{(j)}\,dt$};
\node[right] at (e) {$S_{x+t}^{(j)}$};
\node[below left] at (4,4) {$P(x,t)\,dt$};
\end{tikzpicture}
\end{document}

output

2

This is the kind of thing where I wouldn't use pgfplots at all.

  • If you want to change the width/height of the diagram, change x=8cm,y=4cm to your liking. The axis lines are drawn from (0,0) to (0,1)/(1,0).

  • If you want to raise or lower the horizontal line, modify the value in \pgfmathsetmacro\Y{0.7} to some value between 0 and 1.

  • If you want to move the three vertical lines, modify the values for \Xa, \Xb and \Xc. Again, use values between 0 and 1.

output of code

\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\usepackage{amsmath}
\begin{document}
\begin{tikzpicture}[
  axis/.style={thick,-stealth},
  vector/.style={ultra thick,-latex},
  x=8cm,y=4cm,
  every node/.style={font=\small}
]
\draw [axis] (0,0) node[below left] {$0$} -- (1,0);
\draw [axis] (0,0) -- (0,1);

\pgfmathsetmacro\Y{0.7}
\pgfmathsetmacro\Xa{0.3}
\pgfmathsetmacro\Xb{0.65}
\pgfmathsetmacro\Xc{0.9}

\draw (0,\Y) node[left] {$V(x,0)$} -- (1,\Y);

\foreach \x/\txt/\anchor in {\Xa/t/330,\Xb/t+dt/210,\Xc/n/230}
   \draw (\x,\Y) node[above,anchor=\anchor]{$V(x,\txt)$} -- (\x,0) node[below] {$\txt$};

\draw [vector] (\Xa,\Y) 
   -- node[above]{$\displaystyle 1-\sum_{j=1}^{k}\mu_{x+t}^{(j)}\,dt$}
   (\Xb,\Y);
\draw [vector] (\Xa,\Y) node[below left] {$P(x,t)\,dt$}
   -- node[below left] {$\mu_{x+t}^{(j)}\,dt$}
   (\Xb,\Y/3) node[right] {$S_{x+t}^{(j)}$};

\end{tikzpicture}
\end{document}
1
  • It worked perfectly! Interesting the point to change the width and height of the diagram. Thanks!!!
    – José
    Commented May 4, 2016 at 6:41
2

A PSTricks solution:

\documentclass{article}

\usepackage{mathtools}
\usepackage{pstricks-add}

\newcommand*\diff[1]{\mathop{}\!\mathrm{d}#1}
\def\arrow[#1](#2)(#3)#4{%
  \psline[linewidth = 2.5\pslinewidth]{->}(#2)(#3)
  \pcline[linestyle = none, offset = #1](#2)(#3)
  \ncput{$\displaystyle #4$}}

\begin{document}

\begin{pspicture}(-1.23,-0.4)(10,6.5)
  \pnodes(0,0){A}(2.5,0){B}(7,0){C}(9,0){D}(7,2){E}(0,5){F}(2.5,5){G}(7,5){H}(9,5){I}(10,5){J}
  \psline{<->}(0,6.5)(A)(10,0)
  \uput[225](A){$0$}
  \psline(F)(J)
  \uput[180](F){$V(x,0)$}
  \psline(B)(G)
  \uput[270](B){$t$}
  \psline(C)(H)
  \uput[270](C){$t+\diff{t}$}
  \psline(D)(I)
  \uput[270](D){$n$}
  \arrow[19pt](G)(H){1-\sum_{j = 1}^{k}\mu_{x+t}^{(j)}\diff{t}}
  \arrow[-15pt](G)(E){\mu_{x+t}^{(j)}\diff{t}}
  \uput[90](G){$V(x,t)$}
  \uput[225](G){$P(x,t)\diff{t}$}
  \uput[0](E){$S_{x+t}^{(j)}$}
  \uput[90](H){$V(x,t+\diff{t})$}
  \uput[90](I){$V(x,n)$}
\end{pspicture}

\end{document}

output

In case you want the formulae to be tilted to follow the directions of the arrows instead of always being horizontal, you can add the option nrot = :U to \ncput:

\documentclass{article}

\usepackage{mathtools}
\usepackage{pstricks-add}

\newcommand*\diff[1]{\mathop{}\!\mathrm{d}#1}
\def\arrow[#1](#2)(#3)#4{%
  \psline[linewidth = 2.5\pslinewidth]{->}(#2)(#3)
  \pcline[linestyle = none, offset = #1](#2)(#3)
  \ncput[nrot = :U]{$\displaystyle #4$}}

\begin{document}

\begin{pspicture}(-1.23,-0.4)(10,6.5)
  \pnodes(0,0){A}(2.5,0){B}(7,0){C}(9,0){D}(7,2){E}(0,5){F}(2.5,5){G}(7,5){H}(9,5){I}(10,5){J}
  \psline{<->}(0,6.5)(A)(10,0)
  \uput[225](A){$0$}
  \psline(F)(J)
  \uput[180](F){$V(x,0)$}
  \psline(B)(G)
  \uput[270](B){$t$}
  \psline(C)(H)
  \uput[270](C){$t+\diff{t}$}
  \psline(D)(I)
  \uput[270](D){$n$}
  \arrow[19pt](G)(H){1-\sum_{j = 1}^{k}\mu_{x+t}^{(j)}\diff{t}}
  \arrow[-12pt](G)(E){\mu_{x+t}^{(j)}\diff{t}}
  \uput[90](G){$V(x,t)$}
  \uput[225](G){$P(x,t)\diff{t}$}
  \uput[0](E){$S_{x+t}^{(j)}$}
  \uput[90](H){$V(x,t+\diff{t})$}
  \uput[90](I){$V(x,n)$}
\end{pspicture}

\end{document}

output2

3
  • Sometimes I got a problem with the PStrick package when I run/compile together with .cls or .sty. As I am writing my PhD dissertation I have to run several files and not always works as I expected. I will try this time with this code. Thank you very much.
    – José
    Commented May 4, 2016 at 6:46
  • Sorry but how can I do that? :(
    – José
    Commented May 5, 2016 at 15:14
  • See meta.stackexchange.com/questions/5234/…. Commented May 6, 2016 at 4:46

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .