4

I want to draw several plots in the same tikzpicture (I am not sure if there is other ways to do it) using plot function in tikz. The code is:

\documentclass[preview,border=2pt,2pt]{standalone}

\usepackage{tikz}
\usetikzlibrary{shapes,backgrounds}
\usetikzlibrary{calc}
\usetikzlibrary{decorations.shapes}
\usetikzlibrary{arrows.meta}
\tikzset{decorate sep/.style 2 args=
    {decorate,decoration={shape backgrounds,shape=circle,shape size=#1,shape sep=#2}}}
\tikzset{>={Latex[width=1mm,length=3mm]}}

\begin{document}    
\begin{tikzpicture}
    \tikzstyle{line} = [arrows=<->,line width=0.6pt]
    \tikzstyle{line1} = [line width=.1pt]

    \def\r{0.5pt} %define the radius of spot
    \def\ax{3.3} %define the length of x-axis
    \def\ay{4} %define the length of y-axis
    \def\y{3} %define the height of T=1
    \def\u{4} %define the origin of the second plot
    \def\v{8} %define the origin of the third plot

    \tikzset{
        declare function={
            normpdf(\x,\m,\s,\r)=\r*exp(-((\x-\m)/\s)^4);
        }
    }

    \draw[line] (0,\ay) coordinate node [below left] {$T$} -- (0,0) coordinate node[below] {$0$} -- (\ax, 0) coordinate node [below left] {$x$};
    \draw[scale=1, domain=0:2, smooth, variable=\x] plot ({\x}, {normpdf(\x,0,1.3,\y)});

    \node[left] at (0,\y) {$1$};
    \node[above] at (\ax/2,\y) {(i) $ I_t=[0,\alpha(t)]$};
    \draw[line1] (0, 2.1) -- (1,2.1) -- (1,0);
    \node[below] at (1,0) {$\alpha(t)$};
 
    \draw[line] (\u,\ay) coordinate node [below left] {$T$} -- (\u,0) coordinate node[below] {$0$} -- (\ax+\u, 0) coordinate node [below left] {$x$};
    \draw[scale=1, domain=-2:0, smooth, variable=\x] plot ({\x}, {normpdf(\x,0,1.3,\y)});
     
     \node[left] at (\u,\y) {$1$};
     \node[above] at (\ax/2+\u,\y) {(ii) $ I_t=[\alpha(t),c]$};
     \draw[line1] (\u, 2.1) -- (\u+1,2.1) -- (\u+1,0);
     \node[below] at (\u+1,0) {$\alpha(t)$};
    
\end{tikzpicture}
\end{document}

The problem is how to shift the plot by the second draw to another origin specified by \u ( "\draw[scale=1, domain=-2:0, smooth, variable=\x] plot ({\x}, {normpdf(\x,0,1.3,\y)})"). Thanks.

1
  • It is often easier to arrange multiple tikkzpictures in a row. You can use the [baseline=(coordinate)] option to align specific locations in the two. Jan 10, 2021 at 20:00

1 Answer 1

6

You can design the second plot with the same coordinates as the first one and shift it by the vector (x,y) using

\begin{shift}[shift={(x,y)}]
...
\end{shift}

This allows you to reuse identical parts like shown below.

enter image description here

\documentclass[border=2pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\begin{document}    

\begin{tikzpicture}[
  line/.style={arrows=<->,line width=0.6pt},
  line1/.style={line width=.1pt},
  declare function={normpdf(\x,\m,\s,\r)=\r*exp(-((\x-\m)/\s)^4);},
  >={Latex[width=1mm,length=3mm]}
  ]

  \def\r{0.5pt} %define the radius of spot
  \def\ax{3.3} %define the length of x-axis
  \def\ay{4} %define the length of y-axis
  \def\y{3} %define the height of T=1
  \def\u{4} %define the origin of the second plot
  \def\v{8} %define the origin of the third plot

  \newcommand\myplot[1]{%
    \draw[line] (0,\ay) node [below left] {$T$} -- (0,0) node[below] {$0$} -- (\ax, 0) node [below left] {$x$};
    \draw[scale=1, domain=0:2, smooth, variable=\x] plot ({\x}, {normpdf(\x,0,1.3,\y)});
    \draw[line1] (0, 2.1) -| (1,0) node[below] {$\alpha(t)$};
    \node[left] at (0,\y) {$1$};
    \node[above] at (\ax/2,\y) {#1};
  }

  \myplot{(i) $I_t=[0,\alpha(t)]$}
  \begin{scope}[shift={(\u,0)}]
    \myplot{(ii) $I_t=[\alpha(t),c]$}
  \end{scope}    
\end{tikzpicture}

\end{document}

You must log in to answer this question.

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