¿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.
Respuesta1
El paquete pgfplots
admite 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 pgfplots
es 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 main
capa debajo de las parcelas. Por lo tanto, los siguientes ejemplos movieron con éxito los gráficos a la pre main
capa debajo de la main
capa:
\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}
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 top
que mueve la axis lines
capa 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}