如何使用 pgfplots 调整 xlabel 和 ylabel 的位置?

如何使用 pgfplots 调整 xlabel 和 ylabel 的位置?

我希望将其\sin x置于 y 轴箭头尖端的上方和xx 轴箭头尖端的右侧某处。我该如何实现?除此之外,我想知道如何自己调整距离。

手册中有 7.4.1,但使用该代码不起作用。

MWE(摘自第 50 页)

\documentclass{scrartcl}

\usepackage{
pgfplots,
amsmath
}

\usepackage[T1]{fontenc}
\usepackage{lmodern}


%\pgfplotsset{every axis label/append .style={}}
%\pgfplotsset{every axis x label/append .style={
%at={(0.5,0)},
%right,
%yshift=5pt}}

\begin{document}
\begin{center}
\begin{tikzpicture}
\begin{axis}[
minor tick num=2,
axis y line=left,
axis x line=middle,
xlabel=$x$,ylabel=$\sin x$
]
\addplot[blue,mark=none]
plot[domain=-5:5,samples=40]
(\x,{sin(\x r)});
\end{axis}
\end{tikzpicture}
\end{center}
\end{document}

答案1

pgfplots 提供了几个坐标系,它们可以附加到刻度标签或仅附加到轴:at={(ticklabel cs:<position>)}或带星号的变体ticklabel* cs

无星号版本会将标签移开,使其远离轴,距离与最大刻度标签相匹配。无星号版本会忽略刻度标签的宽度,但会选择放置刻度标签的轴。

您可以ticklabel* cs在这里使用:

\documentclass{standalone}

\usepackage{
pgfplots,
amsmath
}

\usepackage[T1]{fontenc}
\usepackage{lmodern}

\begin{document}
\begin{tikzpicture}
\begin{axis}[
xmin=-2,
minor tick num=2,
axis y line=middle,
axis x line=middle,
xlabel=$x$,ylabel=$\sin x$,
every axis x label/.style={
    at={(ticklabel* cs:1.05)},
    anchor=west,
},
every axis y label/.style={
    at={(ticklabel* cs:1.05)},
    anchor=south,
},
]
\addplot[blue,mark=none]
plot[domain=-5:5,samples=40]
(\x,{sin(\x r)});
\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

我随意更改了显示范围和轴的位置,以强调即使轴线位于中间某处,此解决方案也能正常工作。它甚至适用于 3d 轴,即如果轴以某种方式旋转。

该值ticklabel* cs:1.05告诉 pgfplots

  • 在此上下文中确定正确的轴(上下文是“ every axis x label/.style”,即我们指的是 x 轴),
  • 转到该轴的 105%,其中 0% 是显示的最低限度,100% 是显示的最高限度,
  • 将节点放在那里。

该手册包含对这些特殊坐标系及其变体(如明确包含轴名的坐标系)的深入讨论xticklabel* cs

答案2

您还可以使用预定义节点current axis

\documentclass{scrartcl}

\usepackage{
pgfplots,
amsmath
}
\begin{document}
\begin{center}
\begin{tikzpicture}
\begin{axis}[
axis y line=left,
axis x line=middle,
every axis x label/.style={at={(current axis.right of origin)},anchor=west},
every axis y label/.style={at={(current axis.north west)},above=2mm},
minor tick num=2,
xlabel=$x$,ylabel=$\sin x$
]
\addplot[blue,mark=none]
plot[domain=-5:5,samples=40]
(\x,{sin(\x r)});
\end{axis}
\end{tikzpicture}
\end{center}
\end{document}

相关内容