我尝试向 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}