梅威瑟:
\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)
作为点。比起写两次表达式,它更方便,也更不容易出错。
我还演示了如何计算并打印节点标签中的数字,同样使用声明的函数。我还演示了如何移动xlabel
和ylabel
。
\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}