Tikz-Achsenrand oben, Gitter unten

Tikz-Achsenrand oben, Gitter unten

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.

Bildbeschreibung hier eingeben

Antwort1

Paket pgfplotsunterstü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 pgfplotsist 02.05.2015 v1.12.1.)

Aus Experimenten bin ich zu dem Schluss gekommen, dass die Achsenlinien auf der mainEbene unter den Diagrammen platziert werden. Die folgenden Beispiele haben die Diagramme erfolgreich auf die pre mainEbene unter der mainEbene 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}

Ergebnis

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 topverschiebt .axis linesmain

\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}

verwandte Informationen