Есть ли способ контролировать порядок отображения различных элементов при создании графика tikz pgf?

Есть ли способ контролировать порядок отображения различных элементов при создании графика tikz pgf?

Я создаю несколько раздаточных материалов для студентов и заметил, что элементы моих графиков отображаются в порядке, который может отвлекать. Вот увеличенное изображение, на котором вы можете увидеть, что я имею в виду. Круг в точке x=-2 должен быть дырой в графике, но он отображается под линией. То же самое относится к линии в точке y=0 и к самой сетке. Кажется, что элементы отображаются в порядке, прямо противоположном тому, который мне нужен. Перекрывать Есть ли способ контролировать порядок, чтобы сетка была подо всем, y=0 над осью (чтобы не было черной линии посередине), а два круга были поверх всего? Мой код для этого графика следующий:

\documentclass[12pt]{extarticle}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}

\pgfplotsset{vasymptote/.style={
    before end axis/.append code={
        \draw[densely dashed, magenta] ({rel axis cs:0,0} -| {axis cs:#1,0})
        -- ({rel axis cs:0,1} -| {axis cs:#1,0});
    }
}}

\begin{document}
    \begin{tikzpicture}
      \def\FunctionF(#1){(#1+2)/((#1)^2-4)}
      \def\FunctionG(#1){0}
      \begin{axis}[
        axis y line=center,
        axis x line=middle, 
        axis on top=false,
        xmin=-6.5, xmax=6.5,
        ymin=-6.5, ymax=6.5,
        grid,
        xtick={-6,...,6},
        ytick={-6,...,6},
        yticklabels={-6,,-4,,-2,,,,2,,4,,6},
        xticklabels={-6,,-4,,-2,,,,2,,4,,6},
        vasymptote=2,
        ]

        % Hole
        \coordinate (A) at (-2,-1/4);   
        % y-intercept        
        \coordinate (B) at (0,-1/2);

        % Hole 
        \draw[magenta, thick, fill=white] (A) circle (2pt);
        % y-intercept        
        \filldraw[magenta, thick] (B) circle (2pt);

        % f(x)
        \addplot [domain=-7:2-0.1, samples=50, ultra thick, darkgray] {\FunctionF(x)};
        \addplot [domain=2+0.1:7, samples=50, ultra thick, darkgray] {\FunctionF(x)};
        \node [right, darkgray, thick] at (axis cs: 3,2) {$f(x)$};

        %g(x)
        \addplot [domain=-7:7, samples=20, ultra thick, magenta, densely dashed] {\FunctionG(x)};
      \end{axis}
    \end{tikzpicture}
\end{document}

решение1

Вот один из способов использования слоев. Добавьте set layersи нарисуйте круги в axis foregroundслое, например,

\begin{pgfonlayer}{axis foreground}
    \draw[magenta, thick, fill=white] (A) circle[radius=2pt];
    % y-intercept        
    \filldraw[magenta, thick] (B) circle [radius=2pt];
\end{pgfonlayer}

Полный пример

\documentclass[12pt]{extarticle}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}

\pgfplotsset{vasymptote/.style={
    before end axis/.append code={
        \draw[densely dashed, magenta] ({rel axis cs:0,0} -| {axis cs:#1,0})
        -- ({rel axis cs:0,1} -| {axis cs:#1,0});
    }
}}

\begin{document}
    \begin{tikzpicture}
      \def\FunctionF(#1){(#1+2)/((#1)^2-4)}
      \def\FunctionG(#1){0}
      \begin{axis}[
        axis y line=center,
        axis x line=middle, 
        axis on top=false,
        xmin=-6.5, xmax=6.5,
        ymin=-6.5, ymax=6.5,
        grid,
        xtick={-6,...,6},
        ytick={-6,...,6},
        yticklabels={-6,,-4,,-2,,,,2,,4,,6},
        xticklabels={-6,,-4,,-2,,,,2,,4,,6},
        vasymptote=2,
        set layers%<- added
        ]

        % Hole
        \coordinate (A) at (-2,-1/4);   
        % y-intercept        
        \coordinate (B) at (0,-1/2);

        % Hole 
        \begin{pgfonlayer}{axis foreground}
        \draw[magenta, thick, fill=white] (A) circle[radius=2pt];
        % y-intercept        
        \filldraw[magenta, thick] (B) circle [radius=2pt];
        \end{pgfonlayer}

        % f(x)
        \addplot [domain=-7:2-0.1, samples=50, ultra thick, darkgray] {\FunctionF(x)};
        \addplot [domain=2+0.1:7, samples=50, ultra thick, darkgray] {\FunctionF(x)};
        \node [right, darkgray, thick] at (axis cs: 3,2) {$f(x)$};

        %g(x)
        \addplot [domain=-7:7, samples=20, ultra thick, magenta, densely dashed] {\FunctionG(x)};
      \end{axis}
    \end{tikzpicture}
\end{document}

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

Вы также можете просто нарисовать круги после графиков.

    \addplot [domain=-7:2-0.1, samples=50, ultra thick, darkgray] {\FunctionF(x)};
    \addplot [domain=2+0.1:7, samples=50, ultra thick, darkgray] {\FunctionF(x)};
    \node [right, darkgray, thick] at (axis cs: 3,2) {$f(x)$};

    %g(x)
    \addplot [domain=-7:7, samples=20, ultra thick, magenta, densely dashed] {\FunctionG(x)};
    % Hole 
    \draw[magenta, thick, fill=white] (A) circle[radius=2pt];
    % y-intercept        
    \filldraw[magenta, thick] (B) circle [radius=2pt];

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