Borda do eixo Tikz na parte superior, grades abaixo

Borda do eixo Tikz na parte superior, grades abaixo

Existe uma maneira fácil de colocar a caixa de borda de um gráfico tikz no topo, mantendo as linhas de grade atrás das linhas de dados?

\begin{axis}[axis on top]

O texto acima coloca a borda, as linhas de grade x e as linhas de grade y. Só quero a borda em cima, deixando as grades. Na imagem abaixo você verá que tenho vários preenchimentos que se sobrepõem à borda, o que parece ruim. Tudo o que quero fazer é colocar a borda em cima para cobrir os preenchimentos.

Obrigado.

insira a descrição da imagem aqui

Responder1

O pacote pgfplotssuporta camadas. Do seudocumentaçãoEu teria esperado que qualquer um

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

ou

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

deveria ter funcionado. Mas nem as linhas dos eixos puderam ser movidas para a camada de primeiro plano, nem a grade para a camada de fundo. (A versão testada pgfplotsé 2015/05/02 v1.12.1.)

A partir dos experimentos concluí que as linhas dos eixos são colocadas na maincamada abaixo dos gráficos. Assim, os exemplos a seguir moveram com sucesso os gráficos para a pre maincamada abaixo da maincamada:

\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

Atualização para pgfplots 2020/02/29 v1.17

O exemplo anterior não funciona com versões posteriores do pgfplots. Isso é resolvido definindo uma nova configuração de camada axis lines on topque move a axis linescamada 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}

informação relacionada