绘图总是相对于原点进行绘图

绘图总是相对于原点进行绘图

我正在尝试使用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}

图表串联在一起(余弦除外)

相关内容