![如何使用 pgfplots 调整 xlabel 和 ylabel 的位置?](https://linux22.com/image/271609/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20pgfplots%20%E8%B0%83%E6%95%B4%20xlabel%20%E5%92%8C%20ylabel%20%E7%9A%84%E4%BD%8D%E7%BD%AE%EF%BC%9F.png)
我希望将其\sin x
置于 y 轴箭头尖端的上方和x
x 轴箭头尖端的右侧某处。我该如何实现?除此之外,我想知道如何自己调整距离。
手册中有 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}