% based on Ch. 2 of "Systematic Design of Anlog Integrated Circuits: 
% Using Pre-Computed Lookup Tables" by Paul G.A. Jespers and Boris Murmann
\begin{axis}[ ylabel=$\mathrm{IC}\equal\nicefrac{I_{\mathrm{D}}}{I_{\mathrm{S}}}$
            , xlabel=$\frac{V_{\mathrm{GS}}-V_{\mathrm{TH}}}{nV_{\mathrm{T}}}$ % normalized drain current
            , ymode=log
            , xmin=-10
            , xmax=40
            , ymin=0.001
            , ymax=1000
            , grid=both
            , width= 12cm
            ]

  \addplot[ mark=none
          , domain=0.001:1.05
          , samples=20
          , smooth
          , thick] ({2*(x-1)+ln(x)},{x^2+x}); 
  \addplot[ mark=none
          , domain=1:19.5
          , samples=70
          , smooth
          , thick] ({2*(x-1)+ln(x)},{x^2+x}); 

  \addplot[ mark=none
          , domain=0.001:1.05
          , samples=20
          , smooth
          ] ({2*(x-1)+ln(x)},{x^2}); 
  \addplot[ mark=none
          , domain=1:19.5
          , samples=70
          , smooth
          ] ({2*(x-1)+ln(x)},{x^2}); 

  \addplot[ mark=none
          , domain=0.001:1.05
          , samples=20
          , smooth
          ] ({2*(x-1)+ln(x)},{x}); 
  \addplot[ mark=none
          , domain=1:19.5
          , samples=70
          , smooth
          ] ({2*(x-1)+ln(x)},{x}); 

  \draw[dashed] (axis cs:-3.209,0.001) -- (axis cs:-3.209,1000);
  \draw[dashed] (axis cs:9.609,0.001) -- (axis cs:9.609,1000);

  \draw[dashed] (axis cs:-10,30) -- (axis cs:40,30);
  \draw[dashed] (axis cs:-10,0.24) -- (axis cs:40,0.24);

  \node[ fill=white
       , inner sep=2pt
       , anchor=north
       ] at (axis cs:3.3,900) {moderate (M.I.)};
  \node[ fill=white
       , inner sep=2pt
       , anchor=north
       ] at (axis cs:25,900) {strong (S.I.)};
  \node[ fill=white
       , inner sep=2pt
       , text width=1cm
       , align=center
       , anchor=north] at (axis cs:-6.6,900) {weak (W.I.)};

  \draw[{Latex[round,scale=0.9]}-]
    (axis cs:22.5,10.75) -- (axis cs:25,2) 
    node[anchor=north,fill=white,inner sep=2pt] {diffusion};
  \draw[{Latex[round,scale=0.9]}-]
    (axis cs:-2.5,0.11) -- (axis cs:1.5,0.015) 
    node[anchor=north,fill=white,inner sep=2pt] {drift};

  \draw[{Latex[round,scale=0.9]}-]
    (axis cs:0,2) -- (axis cs:-2,50) 
    node[fill=white,inner sep=2pt] {drift+diffusion};
\end{axis}
