3

I want to draw a simplified Michaelis-Menten kinetic (monod-function) to compare it with a linear function.


Minimum Working Example (MWE):

\documentclass{standalone}
\usepackage{pgfplots}
\usepackage{amsmath}

\pgfplotsset{compat=1.14,   /pgf/declare function={f1(\x)=ln(x);}}% <- This is the exponential function which needs to be optimized

\begin{document}
    \begin{tikzpicture}
        \begin{axis}[
                    ymin        = 0,
                    xmin        = 0,
                    xmax        = 1,
                    ymax        = 0.9,
                    axis x line = bottom,
                    axis y line = left,
                    ]

%           \addplot[no marks, samples=100, draw=blue] {f1(x)};% This is the exponential graph based on the function
            \addplot[no marks, samples=100, draw=black, thick] coordinates{(0,0) (0.2020725942,0.35)};%
            \addplot[no marks, samples=100, draw=black, thick] (0.2020725942,0.35) to [out=60,in=180] (0.8,0.7) to [out=0,in=0] (1,0.7);%
            \draw[draw=black, dashed] (0,0.7) -- node[above] {\(y_{\text{tot}}\)} ++(0.8,0.0);%
            \draw[draw=black, dashed] (0,0.35) -- node[above] {\(\frac{y_{\text{tot}}}{2}\)} ++(0.2020725942,0) -- (0.2020725942,-0.35);%
        \end{axis}
    \end{tikzpicture}
\end{document}

Screenshot of the result:

Screenshot of the result


Description of the issue:

How can I replace the current graph with an exponential graph?

Start point of the exponential graph:

  • Start point: x = 0.2020725942, y = 0.35, angle = 60°,
  • End point: y = ~ 0.7 (of course, wherever the e-function would end)

As soon as I activate the graph with the exponential function, my whole diagram will be distorted. How to implement an exponential graph based on the upper values correctly?

2
  • 3
    This looks like a question of math not of tex/tikz : how should I choose a and b in f(x) = a*exp(x)+b such that f(0.2020725942)=0.35 and f'(0.2020725942)=tan(pi/3) ? If this is the case here is not the right place to ask this question.
    – Kpym
    Apr 3, 2019 at 12:23
  • @Kpym: I am sorry, the confusion came because of the mixed axis scalings. NOT because of the function...
    – Dave
    Apr 3, 2019 at 13:05

2 Answers 2

7

One way is via this (note this uses a differnt function than yours). Your MWE is not wrong IMO. However, due to varying domains, your final axis is getting mixed-up.

Nevertheless, you can obtain your desired solution with a summation of two-exponents.

\documentclass{amsart}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepackage{tikz}
\begin{document} 
    \begin{tikzpicture}
    \begin{axis}[
    scaled ticks=false,
    xmin=0,
    xmax=1,
    ymin=0,
    ymax=1.2,
    xlabel=x axis label,
    ylabel=y axis label,
    axis x line = bottom,
    axis y line = left,
    ]
    \addplot[domain=0.2:1.2, samples=1000, red, ultra thick,smooth] {(1-e^(-5*x)-exp(-10*x))*0.7};
\addplot[no marks, samples=100, draw=black, thick] coordinates{(0,0) (0.2020725942,0.35)};%
\draw[draw=black, dashed] (0,0.7) -- node[above] {\(y_{\text{tot}}\)} ++(1,0.0);%
\draw[draw=black, dashed] (0,0.35) -- node[above] {\(\frac{y_{\text{tot}}}{2}\)} ++(0.2020725942,0) -- (0.2020725942,-0.35);%
    \end{axis}
    \end{tikzpicture}
\end{document}

to get:

enter image description here

2
  • Thanks a lot! I am confused: Why doesn't this work with documentclass{standalone}?
    – Dave
    Apr 3, 2019 at 13:04
  • 1
    @Dave in standalone please include amsmath. Apr 3, 2019 at 13:07
7

I would not find a function for that. A curve with exact starting angle (60°) and ending angle (180°) is enough here.

And also, why don't you simply use tan function in TikZ? 0.2020725942 ≈ 0.35 × tan(30°), but certainly if you type {.35*tan(30)} it is more accurate than 0.2020725942.

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}[scale=8,>=stealth]
\draw[<->] (1,0) -- (0,0) -- (0,.9);
\draw[thick] (0,0) -- ({.35*tan(30)},0.35) coordinate (a);
\draw[thick] (a) to[out=60,in=180] (0.8,0.7) -- (1,0.7);
\foreach \i in {0,0.2,0.4,0.6,0.8} {
    \draw (\i,.01) -- (\i,-.01) node[below] {$\i$};
    \draw (.01,\i) -- (-.01,\i) node[left] {$\i$};
}
\draw (1,.01) -- (1,-.01) node[below] {$1$};
\draw[dashed] (0.8,0.7) -- (0,0.7) node[midway,above] {$y_\mathrm{tot}$};
\draw[dashed] ({.35*tan(30)},0) -- ({.35*tan(30)},0.35);
\draw[dashed] ({.35*tan(30)},0.35) -- (0,0.35) node[midway,above] {$y_\mathrm{tot}/2$};
\end{tikzpicture}
\end{document}

enter image description here

2
  • @Dave I think this is more of an apt answer. Apr 4, 2019 at 4:31
  • 1
    @JouleV: Thanks a lot for your answer! Yes, I have plotted the line as a simple draw with start angle before posting my request. However, the previous line was too uniform - the Michaelis-Menten-kinetic should have a exponential arc instead of a uniform arc. :-( But your idea of posting lengths calculated by angles is just great! Thanks a lot!
    – Dave
    Apr 4, 2019 at 15:51

You must log in to answer this question.

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