我正在尝试自定义轴线扩展pgfplots
。这是我的代码以及我现在得到的结果。
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{%
compat = 1.7,
every non boxed x axis/.style = {%
enlarge x limits = true,
x axis line style = {-stealth}
},
every non boxed y axis/.style = {%
enlarge y limits = true,
y axis line style = {-stealth}
},
axis x line = middle,
axis y line = middle,
every axis x label/.style = {%
at = {(xticklabel cs:1)},
anchor = north},
every axis y label/.style = {%
at = {(yticklabel cs:1)},
anchor=east}
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[xlabel = $x$,
ylabel = $\sin x$]
\addplot+[domain=-10:.5,samples=40] {sin(deg(x))+2};
\end{axis}
\end{tikzpicture}
\end{document}
我想自动完成四件事,但我在处理文档时遇到困难......
(0,0)
无论绘制的函数是什么,两个轴都必须相交。- 必须
xlabel
位于xaxis
其末端的下方并且位于其末端ylabel
的左侧yaxis
(类似于刻度标签)。 - 我想要
ticklabel
0
在左下方出现(0,0)
一次(仅仅说成xticklabel
)。 - 无论绘制的函数是什么,我希望轴在 处相交
(0,0)
并至少在四个方向(上、下、左、右,像 )移动一点+
。在上面的例子中,我只得到了_|_
)。
答案1
- 添加
before end axis/.code={\addplot [draw=none, forget plot] coordinates {(0,0)};}
到您的选项中。这将添加一个不可见的图,其原点处有一个坐标,以确保始终包含原点。 - 使用
xlabel style={anchor=north}, ylabel style={anchor=east}
。使用 时axis lines=middle
,标签会自动定位在轴的尖端,只是对齐方式与您请求的对齐方式不同。 - 您可以添加
\node at (axis cs:0,0) [anchor=north east] {0};
选项before end axis/.code
。这将为您提供与 x 刻度标签略有不同的对齐方式,这可能是也可能不是理想的。 - 添加
enlargelimits=true
。与第 1 点结合,这将确保轴始终至少延伸到原点一点点:
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{%
compat = 1.7,
axis lines=middle,
enlargelimits=true,
before end axis/.code={
\addplot [draw=none, forget plot] coordinates {(0,0)};
\node at (axis cs:0,0) [anchor=north east] {0};
},
xlabel style={
anchor=north
},
ylabel style={
anchor=east
}
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[xlabel = $x$,
ylabel = $\sin x$]
\addplot+[domain=-10:.5,samples=40] {sin(deg(x))+2};
\end{axis}
\end{tikzpicture}
\end{document}