在 axis cs 中使用 exp()

在 axis cs 中使用 exp()

梅威瑟:

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}
\usepackage{amsmath}
\begin{document}
\begin{center}
\begin{tikzpicture}
\begin{axis}[
  axis lines=middle,
  clip=false,
  ymin=0,
  xmin=0,
  ymax=1.05,
  xmax=10.3,
  xtick={2, 4, 6, 8, 10},
  ytick={0.2, 0.4, 0.6, 0.8, 1.0},
]
\addplot+[mark=none,domain=0:10] {exp(x)/(1+exp(x))};
\draw[fill] (axis cs:{2,exp(2)/(1+exp(2))}) circle [radius=1.5pt] node[below right] {$\left( 2, 0.881\right)$};
\node [rotate = 90,left] at (axis cs: -2.5, 0.8) {$\dfrac{e^{|s_1^{(i)} - s_2^{(i)}|}}{1+e^{|s_1^{(i)} - s_2^{(i)}|}}$};
\node [below] at (axis cs: 6, -0.08) {$|s_1^{(i)} - s_2^{(i)}|$};
\end{axis}
\end{tikzpicture}
\end{center}
\end{document}

现在删除该行

\draw[fill] (axis cs:{2,exp(2)/(1+exp(2))}) circle [radius=1.5pt] node[below right] {$\left( 2, 0.881\right)$};

突然出现了图表。为什么(axis cs:{2,exp(2)/(1+exp(2))})无法正确解释?如果我将其更改为(axis cs:{2,exp(2)/(1+exp(2))})(axis cs:2,0.881)它会在正确的区域中绘制点,但我宁愿将其精确绘制而不是近似绘制。

答案1

关键是cs:2,{exp(2)/(1+exp(2))},而不是cs:{2,exp(2)/(1+exp(2))},用括号括住表达式以进行求值。根据 hooy 的建议,后面的外括号cs:也是不需要的(因此被删除了)。

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}
\usepackage{amsmath}
\begin{document}
\begin{center}
\begin{tikzpicture}
\begin{axis}[
  axis lines=middle,
  clip=false,
  ymin=0,
  xmin=0,
  ymax=1.05,
  xmax=10.3,
  xtick={2, 4, 6, 8, 10},
  ytick={0.2, 0.4, 0.6, 0.8, 1.0},
]
\addplot+[mark=none,domain=0:10] {exp(x)/(1+exp(x))};
\draw[fill] (axis cs:2,{exp(2)/(1+exp(2))}) circle [radius=1.5pt] node[below right] {$\left( 2, 0.881\right)$};
\node [rotate = 90,left] at (axis cs: -2.5, 0.8) {$\dfrac{e^{|s_1^{(i)} - s_2^{(i)}|}}{1+e^{|s_1^{(i)} - s_2^{(i)}|}}$};
\node [below] at (axis cs: 6, -0.08) {$|s_1^{(i)} - s_2^{(i)}|$};
\end{axis}
\end{tikzpicture}
\end{center}
\end{document}

在此处输入图片描述

答案2

你的问题已经得到解答了,所以这更像是一个提示。你可以使用语法声明函数

declare function={name(<list of vars>)=<function expression>;}

如果你定义了,declare function={f(\x)=exp(\x)/(1+exp(\x));}那么你可以f(x)在图中使用它,并f(2)作为点。比起写两次表达式,它更方便,也更不容易出错。

我还演示了如何计算并打印节点标签中的数字,同样使用声明的函数。我还演示了如何移动xlabelylabel

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}
\usepackage{amsmath}
\begin{document}
\begin{center}
\begin{tikzpicture}[declare function={f(\x)=exp(\x)/(1+exp(\x));}]
\begin{axis}[
  axis lines=middle,
  clip=false,
  ymin=0,
  xmin=0,
  ymax=1.05,
  xmax=10.3,
  xtick={2, 4, 6, 8, 10},
  ytick={0.2, 0.4, 0.6, 0.8, 1.0},
  ylabel=$\dfrac{e^{|s_1^{(i)} - s_2^{(i)}|}}{1+e^{|s_1^{(i)} - s_2^{(i)}|}}$,
  xlabel=$|s_1^{(i)} - s_2^{(i)}|$,
  xlabel style={at={(ticklabel cs:0.5)},anchor=north},
  ylabel style={at={(ticklabel cs:0.5)},anchor=south,rotate=90},
]
\addplot+[mark=none,domain=0:10] {f(x)};

\addplot [mark=*,black,samples at=2] {f(x)} 
   node[below right] {%
     $( 2,
     \pgfmathparse{f(2)}\pgfmathprintnumber[precision=3]{\pgfmathresult}
     )$};
\end{axis}
\end{tikzpicture}
\end{center}
\end{document}

在此处输入图片描述

相关内容