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.
Responder1
O pacote pgfplots
suporta 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 main
camada abaixo dos gráficos. Assim, os exemplos a seguir moveram com sucesso os gráficos para a pre main
camada abaixo da main
camada:
\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}
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 top
que move a axis lines
camada 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}