对于pgfplots
,在我目前看到的所有 2D 示例以及手册中,轴的位置似乎都是根据绘图框内的位置指定的,即相对于顶部、底部。如何指定 x 轴和 y 轴在原点相交?它们如何通过其他用户指定的坐标对?
答案1
正如约瑟夫所说,为了让轴线通过原点,可以使用以下axis lines=middle
选项:
\begin{axis}[
axis lines=middle
]
\addplot {x^2+rand};
\end{axis}
要选择轴线要经过的任意点,一种实用的方法可能是使用和键转换数据点和标签x filter/.code
,xticklabel
这些键可以包装成自定义样式,如axis lines origin={<x>,<y>}
。这种方法的问题在于,根据您选择的原点,刻度标签最终可能会变得非常奇怪。
\pgfplotsset{
axis line origin/.style args={#1,#2}{
x filter/.append code={ % Check for empty or filtered out numbers
\ifx\pgfmathresult\empty\else\pgfmathparse{\pgfmathresult-#1}\fi
},
y filter/.append code={
\ifx\pgfmathresult\empty\else\pgfmathparse{\pgfmathresult-#2}\fi
},
xticklabel=\pgfmathparse{\tick+#1}\pgfmathprintnumber{\pgfmathresult},
yticklabel=\pgfmathparse{\tick+#2}\pgfmathprintnumber{\pgfmathresult}
}
}
...
\begin{axis}[
axis lines=middle,
axis line origin={1,2}
]
\addplot +[domain=-2:2] {x^2+rand};
\end{axis}
答案2
要绘制通过原点的轴,您需要稍微误导一下的middle
位置:
\begin{axis}[axis lines = middle]
或者
\begin{axis}[axis x line = middle]
等等。