tikz/pgfplots 高级 z 顺序轴/网格

tikz/pgfplots 高级 z 顺序轴/网格

是否可以将axis on top和网格都放在图的最底部(或位于其他平面/线/...之间的某处)?

示例图,axis on top=true但顶部的网格很丑陋:

带有示例图axis on top=false和网格的黄色平面后面看起来不错,但轴和箭头在图形后面看起来很糟糕。

这是一个很小的代码示例

\documentclass{article} \usepackage{pgfplots} 
\begin{document} \begin{tikzpicture}
    \begin{axis}[grid=major,axis x line=bottom,axis y line=left] %axis on top
    \addplot+[mark=none,fill=yellow,draw=red] {0.1*x^2} \closedcycle;
    \end{axis}
\end{tikzpicture} \end{document} 

有人能把轴放在顶部而不把网格放在顶部吗?

答案1

在其他所有操作完成后,我们可以在此处使用after end axis/.code键重新绘制轴线。绘制轴(以及网格线、刻度标记和刻度标签)的宏是内部宏pgfplots@draw@axis,因此我们需要@先分配一个不带 的新名称来使其可用。然后我们可以定义一种新样式,该样式最初将轴线、刻度标记和刻度标签设置为透明,并使用after end axis/.code重置不透明度,隐藏网格并调用pgfplots@draw@axis

这乍一看有点吓人,但一旦axis lines on top定义了样式,你在轴上所要做的就是使用该样式。

\documentclass{article}
\usepackage{pgfplots} 
\begin{document}

\makeatletter \newcommand{\pgfplotsdrawaxis}{\pgfplots@draw@axis} \makeatother

\pgfplotsset{axis line on top/.style={
  axis line style=transparent,
  ticklabel style=transparent,
  tick style=transparent,
  axis on top=false,
  after end axis/.append code={
    \pgfplotsset{axis line style=opaque,
      ticklabel style=opaque,
      tick style=opaque,
      grid=none}
    \pgfplotsdrawaxis}
  }
}

\begin{tikzpicture}
    \begin{axis}[grid=major,axis x line=bottom,axis y line=left,axis line on top]
    \addplot+[mark=none,fill=yellow,draw=red] {0.1*x^2} \closedcycle;
    \end{axis}
\end{tikzpicture}

\end{document} 

轴后面有网格,轴线在上面

答案2

好吧,您可以绘制两次,第一次使用网格,第二次不使用网格,但轴在顶部。

\documentclass{article} 
\usepackage{pgfplots} 
\begin{document} 
\begin{tikzpicture}
    \begin{axis}[grid=major,enlargelimits=false] 
    \addplot+[mark=none,fill=yellow,draw=red] {0.1*x^2} \closedcycle;
    \end{axis}
     \begin{axis}[axis on top=true,enlargelimits=false] 
    \addplot+[mark=none,fill=yellow,draw=red] {0.1*x^2} \closedcycle;
    \end{axis}
\end{tikzpicture} 
\end{document} 

我希望还有其他方法,因为这需要绘图两次,但据我所知,似乎没有简单的方法将轴与网格分开,但由于我是新手,我很容易出错pgfplots

不过,在关键时刻,我认为这会产生你想要的结果。

相关内容