Convertir óvalos concéntricos en círculos concéntricos con un parche rectangular

Convertir óvalos concéntricos en círculos concéntricos con un parche rectangular

Me gustaría dibujar la combinación de dos diagramas. Aquí está mi código para el origen:

\documentclass{article}

\usepackage{pgfplots}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usepackage{tkz-euclide}
%\pgfplotsset{compat=newest} %<------ Here
\pgfplotsset{compat=1.11} %<------ Or use this one

\begin{document}

\begin{center}
\begin{tikzpicture}[scale=1.5][x=1cm,y=1cm]
\begin{axis}[xtick={-5,-4,-3,-2,-1,0,1,2,3,4,5}, ytick={-5,-4,-3,-2,-1,0,1,2,3,4,5},
xmin=-5, xmax=5, ymin=-5, ymax=5, grid=major,
xlabel={Galactic longitude $\ell$ in degree},
ylabel={Galactic latitude $b$ in degree},
axis lines = left,
axis line style={->}]

 % rectangle
 \draw[blue] (0,0) circle[radius=1];
 \draw[blue] (0,0) circle[radius=2];
 \draw[blue] (0,0) circle[radius=3];
 \draw[blue] (0,0) circle[radius=4];
 \draw[blue] (0,0) circle[radius=5];
\end{axis}
\end{tikzpicture}
\end{center}
\end{document}

Intenté dibujar círculos concéntricos pero terminé con óvalos. ¿Me gustaría saber cómo se puede solucionar esto?

Aquí está el segundo tema, me gustaría poner un parche rectangular siguiendo la imagen:

Parche rectangular.

Estoy luchando con estos dos: convertir óvalos en círculos y colocarles un parche rectangular.

Respuesta1

Puedes utilizar lo siguiente:

\documentclass[tikz, border=2mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}

\begin{document}

\begin{tikzpicture}[scale=1.5]
  \begin{axis}[
    xmin=-5, xmax=5, ymin=-5, ymax=5, grid=major,
    xtick={-5,...,5}, ytick={-5,...,5},
    unit vector ratio = 1 1,
    xlabel={Galactic longitude $\ell$ in degree},
    ylabel={Galactic latitude $b$ in degree},
    axis lines = left,
    axis line style={->},
    clip=false]

   \pgfplotsinvokeforeach {1,...,5} {
     \draw[blue] (0,0) circle[radius=#1];
   }
   \draw[green, thick, fill=white] (-5,-0.5) rectangle (5,0.5);
  \end{axis}
\end{tikzpicture}

\end{document}

captura de pantalla

Notas:

  • no pase varios argumentos opcionales a tikzpicture( \begin{tikzpicture}[scale=1.5][x=1cm,y=1cm]es incorrecto, mejor use algo como \begin{tikzpicture}[scale=1.5, x=1cm,y=1cm]);

  • pgfplotsEl nivel de compatibilidad 1.11 es un poco antiguo, lo subí a 1.16. \pgfplotsset{compat=newest}Puede estar bien cuando estás trabajando activamente en una trama y vas a solucionar todos los problemas, peroentoncesCodifique mejor una versión para garantizar que su trama no produzca silenciosamente un resultado diferente en el futuro cuando la vuelva a compilar.
    En esencia, decir \pgfplotsset{compat=1.16}significa: “He verificado que este gráfico funciona bien con pgfplotsel nivel de compatibilidad 1.16, quiero tener el mismo comportamiento cada vez que recompilo. Solo cuando esté listo para solucionar los problemas potenciales introducidos por los cambios, pgfplotscambiaré a un nivel de compatibilidad más nuevo (cuando pgfplotssalgan versiones más recientes; 1.16 es la última en este momento)”.

  • Usé un \pgfplotsinvokeforeachbucle para dibujar los círculos;

  • Dibujé el rectángulo usando el axis cssistema de coordenadas implícito (implícito desde el nivel de compatibilidad 1.11);

  • Lo dibujé después de los círculos para asegurarme de que su relleno cubra los círculos y la cuadrícula;

  • Utilicé la opción unit vector ratio = 1 1para asegurarme de que las unidades en cada eje estén representadas con la misma longitud (esto es lo que hace que los círculos sean círculos reales en lugar de elipses).

  • clip=falsegarantiza que los lados izquierdo y derecho del rectángulo verde no se recorten (de lo contrario, se recortaría la mitad del ancho de la línea; pruébelo).

Se podría usar otro sistema de coordenadas para dibujar el parche rectangular, este es rel axis cs(verSistema de coordenadas eje rel csen elmanual de diagramas de pgf). En este caso, las coordenadas no corresponderían a los valores de sus datos; en su lugar, el rango [0,1] se asignaría a los rangos cubiertos por cada uno de los ejes del gráfico (Xyyaquí, pero esto también funciona con gráficos 3D). En otras palabras, el rectángulo verde también podría dibujarse de esta manera:

\draw[green, thick, fill=white]
  (rel axis cs:0,0.45) rectangle (rel axis cs:1,0.55);

información relacionada