Transformando formas ovais concêntricas em círculos concêntricos com patch retangular

Transformando formas ovais concêntricas em círculos concêntricos com patch retangular

Eu gostaria de desenhar a mistura de dois diagramas. Aqui está meu código para a origem:

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

Estou tentando desenhar círculos concêntricos, mas acabei com formas ovais. Gostaria de saber como isso pode ser corrigido?

Aqui está a segunda questão, gostaria de colocar um patch retangular seguindo a imagem:

Remendo Retangular.

Estou lutando com estes dois: transformar formas ovais em círculos e colocar um remendo retangular neles.

Responder1

Você pode usar o seguinte:

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

Notas:

  • não passe vários argumentos opcionais para tikzpicture( \begin{tikzpicture}[scale=1.5][x=1cm,y=1cm]está incorreto, é melhor usar algo como \begin{tikzpicture}[scale=1.5, x=1cm,y=1cm]);

  • pgfplotso nível de compatibilidade 1.11 é um pouco antigo, aumentei para 1.16. \pgfplotsset{compat=newest}pode ser bom quando você está trabalhando ativamente em uma trama e vai resolver todos os problemas, masentãoé melhor codificar uma versão para garantir que seu gráfico não produza silenciosamente um resultado diferente no futuro, quando você o recompilar.
    Em essência, dizer \pgfplotsset{compat=1.16}significa: “Verifiquei que este gráfico funciona bem com pgfplotso nível de compatibilidade 1.16, quero ter o mesmo comportamento sempre que recompilar. Somente quando eu estiver pronto para corrigir possíveis problemas introduzidos pelas mudanças pgfplotseu mudarei para um nível de compatibilidade mais recente (quando versões mais recentes pgfplotsforem lançadas – 1.16 é a mais recente neste momento)”.

  • Usei um \pgfplotsinvokeforeachlaço para desenhar os círculos;

  • Desenhei o retângulo usando o axis cssistema de coordenadas implícito (implícito desde o nível de compatibilidade 1.11);

  • Desenhei depois dos círculos para ter certeza de que o preenchimento cobre os círculos e a grade;

  • Usei a opção unit vector ratio = 1 1para garantir que as unidades em cada eixo sejam representadas com o mesmo comprimento (é isso que torna os círculos círculos reais em oposição a elipses).

  • clip=falsegarante que os lados esquerdo e direito do retângulo verde não sejam cortados (de outra forma, metade da largura da linha seria cortada - experimente).

Outro sistema de coordenadas poderia ser usado para desenhar o retângulo, este é rel axis cs(vejaSistema de coordenadas rel eixo csnomanual de pgfplots). Nesse caso, as coordenadas não corresponderiam aos valores dos seus dados; em vez disso, o intervalo [0,1] seria mapeado para os intervalos cobertos por cada um dos eixos do gráfico (xesimaqui, mas isso também funciona com gráficos 3D). Em outras palavras, o retângulo verde também poderia ser desenhado desta forma:

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

informação relacionada