Borde del eje Tikz en la parte superior, cuadrículas debajo

Borde del eje Tikz en la parte superior, cuadrículas debajo

¿Existe una manera fácil de colocar el cuadro de borde de un gráfico tikz en la parte superior, manteniendo las líneas de la cuadrícula detrás de las líneas de datos?

\begin{axis}[axis on top]

Lo anterior coloca el borde, las líneas de cuadrícula x y las líneas de cuadrícula y. Sólo quiero el borde arriba, dejando las cuadrículas. En la imagen de abajo verás que tengo varios rellenos que se superponen al borde, lo que se ve mal. Todo lo que quiero hacer es poner el borde arriba para que cubra los rellenos.

Gracias.

ingrese la descripción de la imagen aquí

Respuesta1

El paquete pgfplotsadmite capas. De sudocumentaciónYo hubiera esperado que cualquiera de los dos

\begin{axis}[
  set layers,
  axis line style={on layer=axis foreground},
  ...
]

o

\begin{axis}[
  set layers=axis on top,
  grid style={on layer=axis background},
  ...
]

debería haber funcionado. Pero ni las líneas del eje se pudieron mover a la capa de primer plano, ni la cuadrícula a la capa de fondo. (La versión probada pgfplotses 2015/05/02 v1.12.1.)

De los experimentos llegué a la conclusión de que las líneas de los ejes se colocan en la maincapa debajo de las parcelas. Por lo tanto, los siguientes ejemplos movieron con éxito los gráficos a la pre maincapa debajo de la maincapa:

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}

\begin{document}
\begin{tikzpicture}
  \begin{axis}[
    set layers,
    axis line style={on layer=axis foreground},% not working
    width=50mm, height=50mm,
    xmin=0, xmax=1,
    ymin=0, ymax=1,
    axis line style={line width=2mm},
    grid,
    grid style={line width=1mm},
  ]
    \addplot[line width=10mm, red] coordinates {(0, .5) (1, .5)};
    \addplot[line width=10mm, red] coordinates {(.5, 0) (.5, 1)};
  \end{axis}
\end{tikzpicture}%
\quad
\begin{tikzpicture}
  \begin{axis}[
    set layers,
    every axis plot/.append style={on layer=pre main},
    width=50mm, height=50mm,
    xmin=0, xmax=1,
    ymin=0, ymax=1,
    axis line style={line width=2mm},
    grid,
    grid style={line width=1mm},
  ]
    \addplot[line width=10mm, red] coordinates {(0, .5) (1, .5)};
    \addplot[line width=10mm, red] coordinates {(.5, 0) (.5, 1)};
  \end{axis}
\end{tikzpicture}
\end{document}

Resultado

Actualización para pgfplots 29/02/2020 v1.17

El ejemplo anterior no funciona con versiones posteriores de pgfplots. Esto se soluciona definiendo una nueva configuración de capa axis lines on topque mueve la axis linescapa anterior main.

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}

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

\begin{document}
\begin{tikzpicture}
  \begin{axis}[
    set layers=axis lines on top,
    width=50mm, height=50mm,
    xmin=0, xmax=1,
    ymin=0, ymax=1,
    axis line style={line width=2mm},
    grid,
    grid style={line width=1mm},
  ]
    \addplot[line width=10mm, red] coordinates {(0, .5) (1, .5)};
    \addplot[line width=10mm, red] coordinates {(.5, 0) (.5, 1)};
  \end{axis}
\end{tikzpicture}
\end{document}

información relacionada