我正在尝试使用 pgfplots 绘制函数的斜率场,2x/y
使得每个箭筒的长度是固定的。代码如下
\documentclass{minimal}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
declare function={
f(\x,\y) = (\y != 0) * (2*\x/\y);
length(\x,\y) = sqrt(1+(2*\x/\y)^2);
result = (6 +0.5)/14;
},
domain=-0.5:6,
view={0}{90},
axis lines=center
]
\addplot3[blue, quiver={u={1/length(x,y)}, v={f(x,y)/length(x,y)}, scale arrows=result}, -stealth, samples=14] {0};
\end{axis}
\end{tikzpicture}% Extra \else. ...e arrows=result}, -stealth, samples=14] {0};
\end{document}
在这里我定义了我的函数并尝试在箭筒图中使用它们。但是,我得到了以下无用的错误
! Extra \else.
\pgfmath@local@next ...@local@function@body \else
\if #1(\let \pgfmath@local...
l.32 ...e arrows=length}, -stealth, samples=14] {0};
我看不出代码有什么问题。我试过了,但没有成功
- 将标志更改
/=
为其他可能的替代方案,例如!=
, - 使用文字插入函数调用
我能得到一些帮助吗?
答案1
在您的原始代码中,您忘记了;
定义末尾的result
。您收到Could not parse input 'result' as a floating point number, ...
错误表明 给出的参数scale arrows
未解析为数字,因此该函数被解释。我不知道这是错误还是设计使然。一种可能的解决方法是使用\pgfmathsetmacro
解析result
并保存到宏,如下例所示。
\documentclass{article} % don't use minimal https://tex.stackexchange.com/questions/42114
\usepackage{pgfplots} % loads tikz
\begin{document}
\begin{tikzpicture}
\begin{axis}[
declare function={
f(\x,\y) = (\y != 0) * (2*\x/\y);
length(\x,\y) = sqrt(1+(2*\x/\y)^2);
result = (6 +0.5)/14;
},
domain=-0.5:6,
view={0}{90},
axis lines=center
]
% make an intermediate macro for "result"
\pgfmathsetmacro{\tmpres}{result}
% and use \tmpres for "scale arrows"
\addplot3[blue, quiver={u={1/length(x,y)}, v={f(x,y)/length(x,y)}, scale arrows=\tmpres}, -stealth, samples=14] {0};
\end{axis}
\end{tikzpicture}
\end{document}