如何在 pgfplot (groupplot) 中实现 \draw 的增量定位

如何在 pgfplot (groupplot) 中实现 \draw 的增量定位

我已经使用 Tikz 2 天了,在创建图形时偶然发现了以下问题,但无法完全解释我做错了什么。

我想在图形中添加箭头或路径,如果我使用绝对坐标,它们似乎被正确处理。当添加增量坐标时,位置/基向量似乎被正确解释,但方向向量似乎被完全错误地处理。

有人能告诉我我做错了什么或者这是一个功能/错误吗?

附件是 MWE 和我得到的结果以及我期望的结果(硬编码)。

提前致谢!

\documentclass[tikz]{article}
\usepackage{tikz}
\usepackage[top=25mm, left=25mm, right=25mm, bottom= 25mm]{geometry}
\usetikzlibrary{arrows}
\usepackage{xcolor}
\usepackage{pgfplots}

\usepgfplotslibrary{groupplots}

\pgfplotsset
{
    width = 12cm, 
    height = 43mm,
    compat=newest,
}

\begin{document}
\begin{figure}
    \centering
    \begin{tikzpicture}
        
        \draw[step=1, color=gray!50, thin] (0,-5) grid (15,5);
        
        \begin{groupplot}
        [
        group style={group size=1 by 2, vertical sep = 1cm,},
        axis x line = center, 
        axis y line = left, 
        xmax = 10,
        domain = 0:10,
        samples = 100,
        ]
            \nextgroupplot[title = What I get]
                \addplot[color = red] {2*cos(180*x/pi)};
                \draw[blue,dashed] (0,1.5) rectangle ++(8,-3);
                % Base seems correct but target point currupt 
                \draw[->,green,very thick] (3,0) -- ++(5,1.5); 
            \nextgroupplot[title = What I want]
                \addplot[color = red] {2*cos(180*x/pi)};
                \draw[blue,dashed] (0,1.5) rectangle (8,-1.5);
                \draw[->,green,very thick] (3,0) -- (8,1.5); 
        \end{groupplot}
    \end{tikzpicture}
\end{figure}
\end{document}

在 Overleaf 中打开

我得到的与我想要的

答案1

看来你找到了漏洞:所有相对定位接缝都会在原点上方偏移一定量。您可以看到此偏移 ++(0,0),就像代码中的这一行:

% showing buggy position ++(0,0),   
\draw[red,thick] (3,0) ++(0,0) circle[radius=2pt];

我在位置 (3,2) 处得到一个(裁剪的半个)圆。绘制的函数范围从 -2 到 2。如果我更改余弦的缩放比例,这个半圆将移动到可见绘图窗口顶部的 (3,0) 上方。

我无法判断这个错误是否已知。

为了避免在代码中重复声明点,您可以使用 morecoordinate来定义绘图的关键点,如果需要过滤已定义点的水平位置或垂直位置,则可以使用 (...|-...) 样式的点声明。我在下面的代码中进行了说明:

\nextgroupplot[title = What I get]
      \addplot[color = red] {2*cos(180*x/pi)};
      \draw (0,-1.5) coordinate (b1)
            (8,1.5) coordinate (b2)
            (3,0) coordinate (a1);
      \draw[blue,dashed] (b1) rectangle (b2);
      \draw[->,green,very thick] (a1) -- (b2);
      % making a new box from position (3,0) of same size of previous
      \draw (a1|-b1) rectangle (b2);

结果:

代码结果

相关内容