我正在尝试使用plot
在图片中的某个位置绘制正弦。我期望坐标相对于当前坐标,但它们似乎相对于(0,0)
。下面是一个 MWE,它没有按照我的意愿与其结果图形和我期望它生成的图形一起完成。在这个简单的情况下,将偏移量添加到绘图坐标相当简单。但我想要的图形有点复杂,所以我想正确地做到这一点。有没有办法在当前坐标处绘制任意函数?
梅威瑟:
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
% indicate origin
\draw [red] (0,0) circle (.03);
% plot something that works as intended
\draw [green, domain=0:1] (0,0) -- ++(1,1) -- ++(2,1);
% this does not plot as intended
\draw [blue, domain=0:1] (0,0) -- ++(1,-1) plot({-\x},{sin(360*\x)});
\end{tikzpicture}
\end{document}
答案1
一种可能的解决方法可能是coordinate (tmp)
在之前添加plot
,然后添加shift={(tmp)}
到plot
选项中。
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
% indicate origin
\draw [red] (0,0) circle (.03);
% plot something that works as intended
\draw [green, domain=0:1] (0,0) -- ++(1,1) -- ++(2,1);
% this plots as intended
\draw [blue, domain=0:1] (0,0) -- ++(1,-1) coordinate(tmp) plot[shift={(tmp)}] ({-\x},{sin(360*\x)});
\end{tikzpicture}
\end{document}
答案2
请注意,使用 的方法coordinate (tmp)
不允许您无缝地继续路径。当前路径位置将偏离负值shift
。这在将图链接在一起时会出现问题:
\begin{tikzpicture}
\draw [red] (0,0) circle (.03);
\draw [blue, domain=0:1] (0,0) -- ++(1,-1)
coordinate(tmp) plot[shift=(tmp)] ({\x},{sin(360*\x)})
coordinate(tmp) plot[shift=(tmp)] ({\x},{\x^2});
\end{tikzpicture}
蓝色路径应该是连续的。您可以通过++(tmp)
在每个图后添加来解决这个问题,但我们也可以通过定义自己的样式来自动化这个过程relative plot
。
请注意,这仅适用于以 开始的图(0,0)
,例如sin(x)
或x^2
。 的图cos(x)
从 `(0,1) 开始,因此与上一个图的末尾偏移 1 厘米。
\documentclass{article}
\usepackage{tikz}
\makeatletter
\tikzset{
relative plot/.style={
/utils/exec={\xdef\relativePlotLocation{\the\tikz@lastxsaved,\the\tikz@lastysaved}},
shift=(\relativePlotLocation),
append after command={++(\relativePlotLocation)},
}
}
\makeatother
\begin{document}
\begin{tikzpicture}
\draw [red] (0,0) circle (.03); % indicate origin
\draw [blue, domain=0:1] (0,0) -- ++(1,-1)
plot[relative plot] ({\x},{sin(360*\x)})
plot[relative plot] ({\x},{\x^2})
plot[relative plot] ({\x},{cos(360*\x)})
node[above left] {\tiny cos does not start at 0,0 :-(}
-- (0,0); % normal drawing also works
\end{tikzpicture}
\end{document}