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. ¿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 layers
y dibuje los círculos en la axis foreground
capa, 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}
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];