中轴线定制

中轴线定制

我正在尝试自定义轴线扩展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}

我想自动完成四件事,但我在处理文档时遇到困难......

  1. (0,0)无论绘制的函数是什么,两个轴都必须相交。
  2. 必须xlabel位于xaxis其末端的下方并且位于其末端ylabel的左侧yaxis(类似于刻度标签)。
  3. 我想要ticklabel 0在左下方出现(0,0)一次(仅仅说成xticklabel)。
  4. 无论绘制的函数是什么,我希望轴在 处相交(0,0)并至少在四个方向(上、下、左、右,像 )移动一点+。在上面的例子中,我只得到了_|_)。

答案1

  1. 添加before end axis/.code={\addplot [draw=none, forget plot] coordinates {(0,0)};}到您的选项中。这将添加一个不可见的图,其原点处有一个坐标,以确保始终包含原点。
  2. 使用xlabel style={anchor=north}, ylabel style={anchor=east}。使用 时axis lines=middle,标签会自动定位在轴的尖端,只是对齐方式与您请求的对齐方式不同。
  3. 您可以添加\node at (axis cs:0,0) [anchor=north east] {0};选项before end axis/.code。这将为您提供与 x 刻度标签略有不同的对齐方式,这可能是也可能不是理想的。
  4. 添加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}

相关内容