将网格放在 pgfplots 中的图下方

将网格放在 pgfplots 中的图下方

在带有 pgfplots 的图中,我想按以下顺序从背景到前景进行绘制:

  1. (背景)网格;
  2. (中间层)图;
  3. (前景)轴。

作为指定在这个答案中

添加axis on top轴选项意味着轴线、刻度和网格将打印在环境内部的东西上面。

所以,这不是正确的选择。此代码

\documentclass{article}
\usepackage{pgfplots}
\usetikzlibrary{shapes.geometric,arrows,arrows.meta}
\pgfplotsset{
    /pgfplots/layers/Bowpark/.define layer set={
        axis background,axis grid,main,axis ticks,axis lines,axis tick labels,
        axis descriptions,axis foreground
    }{/pgfplots/layers/standard},
}

\begin{document}

\begin{tikzpicture}
\begin{axis}[/pgfplots/layers/Bowpark,
             width=\textwidth,
             xmin=-0.5, xmax=6,
             ymin=-0.5, ymax=4,
             axis line style = thin,
             axis lines=middle,
             axis line style={-{Stealth[length=2.5mm]}},
             thick,
             grid=major, grid style={dashed,gray!30}]

    \addplot[blue, samples = 100] {x^2};

\end{axis}
\end{tikzpicture}

\end{document}

也不起作用(图在网格上方,也在轴上方)。我使用了\addplot[blue, samples = 100] {x^2};而不是 来\addplot[samples = 100] {x^(1/2)};更好地突出图、网格和轴的叠加。

在此处输入图片描述

在此处输入图片描述

出了什么问题?请注意,尝试

\pgfplotsset{
    /pgfplots/layers/Bowpark/.define layer set={
        axis background,main,axis grid,axis ticks,axis lines,axis tick labels,
        axis descriptions,axis foreground
    }{/pgfplots/layers/standard},
}

main(交换和的顺序axis grid)产生相同的输出。

也许我的配置忽略了图层顺序?

答案1

在第 4.27 节中对此进行了详细讨论pgfplots手动的layer set。我所做的只是根据定义一个新的,其中我将和axis on top的顺序颠倒过来。axis gridmain

\documentclass{article}
\usepackage{pgfplots}
\usetikzlibrary{shapes.geometric,arrows,arrows.meta}
\pgfplotsset{
    /pgfplots/layers/Bowpark/.define layer set={
        axis background,axis grid,main,axis ticks,axis lines,axis tick labels,
        axis descriptions,axis foreground
    }{/pgfplots/layers/standard},
}

\begin{document}

\begin{tikzpicture}
\begin{axis}[width=\textwidth,
             xmin=-0.5, xmax=6,
             ymin=-0.5, ymax=4,
             axis line style = thin,
             axis lines=middle,
             axis line style={-{Stealth[length=2.5mm]}},
             thick,
             grid=major, grid style={dashed,gray!30},
             set layers=Bowpark]

    \addplot[blue, samples = 100] {x^2};

\end{axis}
\end{tikzpicture}

\end{document}

在此处输入图片描述

编辑:修复了bug,我太马虎了,抱歉!


由用户编辑 2022-10-30曼努埃尔·库纳

如果你使用fillbetween库,似乎你还必须将包含pre main在列表中。就我而言,我将pre main其放在main

包 pgfplots 警告:“fill between”:无法激活图形层“pre main”。填充路径将位于其他路径之上。请确保“pre main”位于图层列表中的某个位置(或设置“/tikz/fill between/on layer=”)。


相关内容