¿Hay alguna manera de controlar el orden en el que se representan los diferentes elementos al hacer un gráfico tikz pgf?

¿Hay alguna manera de controlar el orden en el que se representan los diferentes elementos al hacer un gráfico tikz pgf?

Estoy creando varios folletos para los estudiantes y he notado que los elementos de mis gráficos aparecen en un orden que puede distraer. Aquí tenéis una imagen ampliada donde podéis ver a qué me refiero. Se supone que el círculo en x=-2 es un agujero en el gráfico, pero aparece debajo de la línea. Lo mismo se aplica a la línea en y=0 y a la cuadrícula misma. Parece que los elementos se representan en el orden exactamente opuesto al que necesito. Superposición ¿Hay alguna manera de controlar el orden, de modo que la cuadrícula esté debajo de todo, y = 0 esté sobre el eje (por lo que no haya una línea negra en el medio) y los dos círculos estén encima de todo? Mi código para este gráfico es el siguiente:

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

Respuesta1

A continuación se muestra una forma de utilizar capas. Agregue set layersy dibuje los círculos en la axis foregroundcapa, digamos,

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

Ejemplo completo

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

ingrese la descripción de la imagen aquí

También puedes simplemente dibujar los círculos después de los gráficos.

    \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];

información relacionada