Gibt es eine einfache Möglichkeit, das Rahmenfeld eines Tikz-Diagramms oben zu platzieren und gleichzeitig die Gitternetzlinien hinter den Datenzeilen zu belassen?
\begin{axis}[axis on top]
Oben werden der Rahmen, die X- und Y-Rasterlinien eingefügt. Ich möchte nur den Rahmen oben haben und die Raster stehen lassen. Im Bild unten sehen Sie, dass ich mehrere Füllungen habe, die den Rahmen überlappen, was schlecht aussieht. Ich möchte nur den Rahmen oben haben, damit er die Füllungen bedeckt.
Danke schön.
Antwort1
Paket pgfplots
unterstützt Schichten. Von seinerDokumentationIch hätte erwartet, dass entweder
\begin{axis}[
set layers,
axis line style={on layer=axis foreground},
...
]
oder
\begin{axis}[
set layers=axis on top,
grid style={on layer=axis background},
...
]
hätte funktionieren sollen. Aber weder die Achsenlinien ließen sich in die Vordergrundebene verschieben, noch das Raster in die Hintergrundebene. (Getestete Version pgfplots
ist 02.05.2015 v1.12.1.)
Aus Experimenten bin ich zu dem Schluss gekommen, dass die Achsenlinien auf der main
Ebene unter den Diagrammen platziert werden. Die folgenden Beispiele haben die Diagramme erfolgreich auf die pre main
Ebene unter der main
Ebene verschoben:
\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}
Update für pgfplots 2020/02/29 v1.17
Das vorherige Beispiel funktioniert nicht mit späteren Versionen von pgfplots. Dieses Problem wird gelöst, indem eine neue Layer-Konfiguration definiert wird , die den Layer davor axis lines on top
verschiebt .axis lines
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}