Граница оси Tikz сверху, сетки снизу

Граница оси Tikz сверху, сетки снизу

Есть ли простой способ разместить границу графика Tikz сверху, сохранив при этом линии сетки за линиями данных?

\begin{axis}[axis on top]

Вышеуказанное помещает границу, линии сетки x и линии сетки y. Я просто хочу, чтобы граница была сверху, оставив сетки. На изображении ниже вы увидите, что у меня есть несколько заливок, которые перекрывают границу, что выглядит плохо. Все, что я хочу сделать, это поместить границу сверху, чтобы она закрывала заливки.

Спасибо.

введите описание изображения здесь

решение1

Пакет pgfplotsподдерживает слои. Из егодокументацияЯ бы ожидал, что либо

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

или

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

Должно было сработать. Но ни линии осей не удалось переместить на передний план, ни сетку на фоновый. (Протестированная версия pgfplots— 2015/05/02 v1.12.1.)

Из экспериментов я сделал вывод, что линии осей располагаются на mainслое под графиками. Таким образом, следующие примеры успешно переместили графики на pre mainслой под mainслоем:

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

Результат

Обновление для pgfplots 2020/02/29 v1.17

Предыдущий пример не работает с более поздними версиями pgfplots. Это решается путем определения новой конфигурации слоя, axis lines on topкоторая перемещает 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}

Связанный контент