7

Assumed I want to draw three simple graphs based on the following illustration:

Screenshot of the desired state


How can I plot those three graphs? I've tried to create something like this:

Minimum Working Example (MWE):

\documentclass{standalone}
\usepackage{pgfplots}

\begin{document}
    \begin{tikzpicture}
       \begin{axis}[domain=0:1]
         \addplot+[no marks, samples=100] {exp(3*x)};
         \addplot+[no marks, samples=100] {(-exp(3*x)+20)};
       \end{axis}
    \end{tikzpicture}
\end{document}

Screenshot of the current state:

Screenshot of the current state


Description of the issue:

However, I don't get the point on how to figure out the function of the third graph as well as how to clip the graphs in x and y direction to align them centered in the plot. It is not necessary to be completely precise, the accuracy of my upper template will be fine enough.

How to do that?

  • 3
    @close-voter: Please explain in a comment your reason for voting to close! – Kurt Apr 1 at 20:15
  • I accept the Kurt's comment. – Sebastiano Apr 1 at 20:39
9

You can use the function f1*f2/(f1+f2) to get something like what you describe. To make the code a bit clearer I defined the functions f1 and f2.

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{%
  compat=1.12,
  /pgf/declare function={f1(\x)=exp(3*\x);},
  /pgf/declare function={f2(\x)=-exp(3*\x)+20;},
}
\begin{document}
    \begin{tikzpicture}
       \begin{axis}[domain=0:1]
         \addplot+[no marks, samples=100] {f1(x)};
         \addplot+[no marks, samples=100] {f2(x)};
         \addplot+[no marks, samples=100] {f1(x)*f2(x)/(f1(x)+f2(x))};
       \end{axis}
    \end{tikzpicture}
\end{document}

enter image description here

If you want the function to follow more closely you can use sqrt(f1^2*f2^2/(f1^2+f2^2). Then replace the third plot with

\addplot+[no marks, samples=100] {sqrt(f1(x)*f1(x)*f2(x)*f2(x)/(f1(x)*f1(x)+f2(x)*f2(x)))};

to get

enter image description here

Slightly more general, one can use the exponent \a (does not have to be an integer):

 \foreach \a in {1,...,5}{
   \addplot+[no marks, samples=100] {(f1(x)^\a*f2(x)^\a/(f1(x)^\a+f2(x)^\a))^(1/\a)};
 }

enter image description here

  • The lower one looks perfect, thank you very much!! – Dave Apr 1 at 21:13
  • Your last edit is simply perfect! Thank you so much! – Dave Apr 6 at 18:29
5

Are you looking for the minimum? (I shifted the plot a bit but you can of course undo the shift.)

\documentclass[border=3.14mm,tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
    \begin{tikzpicture}
       \begin{axis}[domain=0:1]
         \addplot+[no marks, samples=100] {exp(3*x)};
         \addplot+[no marks, samples=100] {(-exp(3*x)+20)};
         \addplot+[no marks, samples=6,smooth]
         {min(exp(3*x),(-exp(3*x)+20))-pi/2};
       \end{axis}
    \end{tikzpicture}
\end{document}

enter image description here

  • Thank you very much marmot! The user StefanH has also posted a great approach which looks very smooth - I hope you are not disappointed if I choose his option as an answer? – Dave Apr 1 at 21:14

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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