的背景
在 pgfplots 中,可以制作绘图元素,例如轴标签、刻度和图例overlay
,这意味着在确定绘图的边界框时不会考虑它们。
使用节点是标记图中兴趣点的好方法,但是如果节点自动放置在图的边界框之外,它将被剪裁。
问题
是否可以以某种方式将节点设置为像设置为一样运行overlay
?节点样式选项似乎不响应此关键字。或者,是否可以简单地告诉 pgfplots 不要在绘图区域描述的边界框边缘处剪切图形?
我考虑过的事情
但这并不是我想要的:
使用以下方法扩展绘图
enlargelimits
:在绘图区域中添加了更多空白空间,并且将 y 轴基线降低到零以下,这在我绘制的数据集渐近于零时是不合适的。使用手册扩展绘图
xmin
:xmax
由于与上述类似的原因,在这种情况下也是不希望的。根据感兴趣的坐标对节点进行情境重新定位:我希望节点的方向保持一致。
最小示例
(数据集来自 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}
参考图
感谢任何人提供的帮助。
答案1
您可以将选项添加clip=false,enlargelimits=false
到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,
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}
或者,您也可以在绘图完成后使用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}