Есть ли простой способ разместить границу графика 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}