将 pgfplots 中的节点声明为覆盖

将 pgfplots 中的节点声明为覆盖

的背景

在 pgfplots 中,可以制作绘图元素,例如轴标签、刻度和图例overlay,这意味着在确定绘图的边界框时不会考虑它们。

使用节点是标记图中兴趣点的好方法,但是如果节点自动放置在图的边界框之外,它将被剪裁。

问题

是否可以以某种方式将节点设置为像设置为一样运行overlay?节点样式选项似乎不响应此关键字。或者,是否可以简单地告诉 pgfplots 不要在绘图区域描述的边界框边缘处剪切图形?

我考虑过的事情

但这并不是我想要的:

  • 使用以下方法扩展绘图enlargelimits在绘图区域中添加了更多空白空间,并且将 y 轴基线降低到零以下,这在我绘制的数据集渐近于零时是不合适的。

  • 使用手册扩展绘图xminxmax由于与上述类似的原因,在这种情况下也是不希望的。

  • 根据感兴趣的坐标对节点进行情境重新定位:我希望节点的方向保持一致。

最小示例

(数据集来自 pgfplots 手册)

\documentclass{minimal}
\usepackage{pgfplots}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[]
\tikzstyle{every pin}=[draw=none,fill=white]
\begin{axis}[
width=10cm,
height=5cm,
axis x line*=bottom,
xlabel={$x$},
axis y line*=left,
ylabel={$y$},
grid=none
]
\addplot[color=black,mark=none] coordinates {
(-4.77778,2027.60977)
(-3.55556,347.84069)
(-2.33333,22.58953)
(-1.11111,-493.50066)
(0.11111,46.66082)
(1.33333,-205.56286)
(2.55556,-341.40638)
(3.77778,-1169.24780)
(5.00000,-3269.56775)
};
\node[coordinate,pin=above right:{node}] at (axis cs:3.77778,-1169.24780) {};
\end{axis}
\end{tikzpicture}
\end{document}

参考图

带有剪切节点文本的 pgfplots 图表的参考渲染。

感谢任何人提供的帮助。

答案1

您可以将选项添加clip=false,enlargelimits=falseaxis环境中,以防止在轴的边缘剪切节点。

\documentclass{minimal}
\usepackage{pgfplots}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[]
\tikzstyle{every pin}=[draw=none,fill=white]
\begin{axis}[
width=10cm,
height=5cm,
axis x line*=bottom,
xlabel={$x$},
axis y line*=left,
ylabel={$y$},
grid=none,
clip=false,
enlargelimits=false
]
\addplot[color=black,mark=none] coordinates {
(-4.77778,2027.60977)
(-3.55556,347.84069)
(-2.33333,22.58953)
(-1.11111,-493.50066)
(0.11111,46.66082)
(1.33333,-205.56286)
(2.55556,-341.40638)
(3.77778,-1169.24780)
(5.00000,-3269.56775)
};
\node[coordinate,pin=above right:{node}] at (axis cs:3.77778,-1169.24780) {};
\end{axis}
\end{tikzpicture}
\end{document}

不带剪辑的 pgfplots

或者,您也可以在绘图完成后使用after end axis/.code必须提供给的键添加注释axis。这种方法的优点是轴的剪切行为保持不变,因此仍然可以剪切标记。

\documentclass{minimal}
\usepackage{pgfplots}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[]
\tikzstyle{every pin}=[draw=none,fill=white]
\begin{axis}[
width=10cm,
height=5cm,
axis x line*=bottom,
xlabel={$x$},
axis y line*=left,
ylabel={$y$},
grid=none,
enlargelimits=false,
after end axis/.code={\node[coordinate,pin=above right:{node}] at (axis cs:3.77778,-1169.24780) {};}
]
\addplot[color=black,mark=none] coordinates {
(-4.77778,2027.60977)
(-3.55556,347.84069)
(-2.33333,22.58953)
(-1.11111,-493.50066)
(0.11111,46.66082)
(1.33333,-205.56286)
(2.55556,-341.40638)
(3.77778,-1169.24780)
(5.00000,-3269.56775)
};
\end{axis}
\end{tikzpicture}
\end{document}

相关内容