将绘图添加到 pgfplot

将绘图添加到 pgfplot

我尝试向 pgfplot(gnuplot)添加一些绘图对象,MWE 如下:

\documentclass{standalone}
\usepackage{pgfplots}
\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}
\pgfplotsset{compat=newest}

\begin{tikzpicture}
% define lengths and coordinates
\def\xinit{0}
\def\yinit{-2.5}
\def\hgt{0.5}
\def\wa{1.}
\def\wb{0.5}
\def\wc{1}
\begin{axis}[
xlabel={x},
ylabel={y},
restrict x to domain=0:2*pi,
no markers,
clip = false,
]

\addplot gnuplot [raw gnuplot, very thick] {set xrange [0:2*pi];
    set samples 1000;
plot sin(x^2) w l};
\draw (\xinit,\yinit) rectangle ++(\wa, \hgt) coordinate (a1);
\fill[red] (\xinit,\yinit) rectangle (\xinit +\wa,\yinit +\hgt);
\draw (a1) -- +(2,0);
\end{axis}
\end{tikzpicture}

\end{document}

我不明白为什么第一个矩形画错了,它应该与第二个矩形(红色)相同。接下来,我想按顺序绘制几个已知长度的对象。最后一条命令显示我尝试首先定义坐标(a1),然后使用此坐标作为下一个对象的初始坐标:这应该是一条长度为 2 的水平线(a1)(实际上来自(a1) + (0,-\hgt /2)——红色矩形右侧的中间)。因此,如果我明确设置坐标,这会起作用,但+++方法则不会。

谢谢。

答案1

您必须使用axis direction cs(除了+++)才能使其工作。 PGFPlots 手册中说明第 355 页上的第 4.17.1 节 (v1.17) - 访问图形元素中的轴坐标

虽然axis cs允许供应绝对位置axis direction cs 补给品方向. 它允许表达相对的通过轴坐标表示位置,包括长度和尺寸。

如 的文档中所述axis cs,通过 TikZ++运算符添加两个坐标可能会产生意想不到的效果。正确的操作方式 ++axis direction cs:[...]

% used PGFPlots v1.14
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
    \usetikzlibrary{calc}
\begin{document}
    \pgfplotsset{compat=newest}
\begin{tikzpicture}
        % define lengths and coordinates
        \def\xinit{0}
        \def\yinit{-2.5}
        \def\hgt{0.5}
        \def\wa{1.}
        \def\wb{0.5}
        \def\wc{1}
    \begin{axis}[
        xlabel={x},
        ylabel={y},
        restrict x to domain=0:2*pi,
        no markers,
        clip = false,
    ]
        \addplot gnuplot [raw gnuplot, very thick] {
            set xrange [0:2*pi];
            set samples 1000;
            plot sin(x^2) w l;
        };
        % this doesn't work (as expected), ...
        \draw (\xinit,\yinit) rectangle ++(\wa, \hgt) coordinate (a1);
        % ... because you have to use `axis direction cs:', too.
        \draw [ultra thick,thick,blue]
            (\xinit,\yinit) rectangle ++(axis direction cs:\wa, \hgt)
                coordinate (a1);

        \fill [red] (\xinit,\yinit) rectangle (\xinit +\wa,\yinit +\hgt);

        \draw (a1) -- +(2,0);
        % the same here
        \draw [very thick,green] (a1) -- +(axis direction cs:2,0);
    \end{axis}
\end{tikzpicture}
\end{document}

该图显示了上述代码的放大结果

相关内容