这可能是在 tikzpicture 中定位 pgfplots 轴我猜;考虑以下 MWE:
\documentclass{standalone}
\usepackage{pgfplots}
\usetikzlibrary{positioning}
\pagecolor{yellow!15}
\begin{document}
\begin{tikzpicture}
\tikzstyle{nn} = [rectangle,draw,minimum width=4cm,minimum height=2cm,line width=1pt,inner sep=0pt]
\tikzstyle{ni} = [rectangle,draw,minimum width=2cm,minimum height=2cm,draw=red]
\node[nn,anchor=south west] (nodeOne) at (0,0) {One};
\node[nn,rotate=90] (nodeTwo) [right=6cm of nodeOne] {\emph{Two}} ;
\node[ni]
(nodeIndicator) [above right=0cm and 1.5cm of nodeOne] {} ;
\begin{axis}[%
% at={(nodeOne)}, % passes
% at={above right=0cm and 1.5cm of nodeOne}, % tikz Error: Cannot parse this coordinate.
above right=0cm and 1.5cm of nodeOne, % passes, but wrong?
inner sep=0pt,
width=4cm,
height=3cm,
]
\addplot coordinates { (0,0) (1,1) } ;
\end{axis}
% graphical rulers in tikz - via grid:
% x ruler:
\draw[red] (0,0) grid[step=1cm] ({current bounding box.east|-(0cm,0.5cm);});
% y ruler:
\draw[red] (0,0) grid[step=1cm] ({current bounding box.north-|(0.5cm,0cm);});
\end{tikzpicture}
\end{document}
它产生以下输出:
可以看出,above right=0cm and 1.5cm of nodeOne
由于positioning
库的原因,语法在的情况下按预期工作nodeIndicator
。
但是,如果我在环境中使用相同的构造{axis}
,它将被完全忽略!所以我的问题是 - 如何positioning
在 pgfplots{axis}
环境中使用库语法?
第二 - 我刚刚在这个 MWE 上注意到了这一点 - 您可以看到,即使我width=4cm,height=3cm
为环境指定,渲染的图也要小得多(这就是添加标尺的原因)。在环境的情况下,和{axis}
应该指什么大小?(它不是内部图;也不是内部图+轴刻度标签......也与此相关:width
height
{axis}
如何正确缩放具有 `\begin{axis}...\end{axis}` 的 TikZ/PGF 图片)
答案1
我不知道为什么该语法不起作用,但您可以使用calc
库的语法。虽然不完全相同,但它确实允许您相对于其他节点/坐标放置轴。请注意,的默认值anchor
是axis
,south west
如果需要,请更改。
在下面的代码中,我使用了at={($(nodeOne)+(0cm,1.5cm)$)}
。当没有提供节点的锚点(例如nodeOne.west
)时,则假定锚点。如您所见,的center
左下角( )位于 中心上方 1.5 厘米处。anchor=south west
axis
nodeOne
\documentclass{standalone}
\usepackage{pgfplots}
\usetikzlibrary{positioning,calc}
\pagecolor{yellow!15}
\begin{document}
\begin{tikzpicture}
\tikzset{
nn/.style={rectangle,draw,minimum width=4cm,minimum height=2cm,line width=1pt,inner sep=0pt},
ni/.style={rectangle,draw,minimum width=2cm,minimum height=2cm,draw=red}}
\node[nn,anchor=south west] (nodeOne) at (0,0) {One};
\node[nn,rotate=90] (nodeTwo) [right=6cm of nodeOne] {\emph{Two}} ;
\node[ni]
(nodeIndicator) [above right=0cm and 1.5cm of nodeOne] {} ;
\begin{axis}[%
at={($(nodeOne)+(0cm,1.5cm)$)},
anchor=south west,
inner sep=0pt,
width=4cm,
height=3cm,
scale only axis
]
\addplot coordinates { (0,0) (1,1) } ;
\end{axis}
% graphical rulers in tikz - via grid:
% x ruler:
\draw[red] (0,0) grid[step=1cm] ({current bounding box.east|-(0cm,0.5cm);});
% y ruler:
\draw[red] (0,0) grid[step=1cm] ({current bounding box.north-|(0.5cm,0cm);});
\end{tikzpicture}
\end{document}