Konzentrische Ovale in konzentrische Kreise mit rechteckigem Patch umwandeln

Konzentrische Ovale in konzentrische Kreise mit rechteckigem Patch umwandeln

Ich möchte die Mischung zweier Diagramme zeichnen. Hier ist mein Code für den Ursprung:

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

Ich versuche, konzentrische Kreise zu zeichnen, aber am Ende bekomme ich Ovale. Ich würde gerne wissen, wie ich das beheben kann.

Hier ist das zweite Problem. Ich möchte einen rechteckigen Patch nach dem Bild einfügen:

Rechteckiger Aufnäher.

Mit diesen beiden habe ich Probleme: Ovale in Kreise umzuwandeln und einen rechteckigen Flicken darauf zu platzieren.

Antwort1

Sie können Folgendes verwenden:

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

Bildschirmfoto

Anmerkungen:

  • Übergeben Sie nicht mehrere optionale Argumente an tikzpicture( \begin{tikzpicture}[scale=1.5][x=1cm,y=1cm]ist falsch, verwenden Sie besser etwas wie \begin{tikzpicture}[scale=1.5, x=1cm,y=1cm]);

  • pgfplotsKompatibilitätsstufe 1.11 ist etwas alt, ich habe sie auf 1.16 hochgestuft. \pgfplotsset{compat=newest}mag in Ordnung sein, wenn Sie aktiv an einem Plot arbeiten und alle Probleme beheben wollen, aberDannEs ist besser, eine Version fest zu codieren, um sicherzustellen, dass Ihr Plot in Zukunft beim erneuten Kompilieren nicht stillschweigend ein anderes Ergebnis erzeugt.
    Im Wesentlichen \pgfplotsset{compat=1.16}bedeutet „sagen“: „Ich habe überprüft, dass dieser Plot mit pgfplotsKompatibilitätsstufe 1.16 einwandfrei funktioniert. Ich möchte bei jeder erneuten Kompilierung dasselbe Verhalten haben. Erst wenn ich bereit bin, potenzielle Probleme zu beheben, die durch Änderungen in verursacht wurden, pgfplotswerde ich auf eine neuere Kompatibilitätsstufe umsteigen (wenn neuere Versionen von pgfplotsherauskommen – 1.16 ist zu diesem Zeitpunkt die neueste)“.

  • Ich habe eine \pgfplotsinvokeforeachSchleife verwendet, um die Kreise zu zeichnen.

  • Ich habe das Rechteck mithilfe des impliziten axis csKoordinatensystems gezeichnet (implizit seit Kompatibilitätsstufe 1.11).

  • Ich habe es nach den Kreisen gezeichnet, um sicherzustellen, dass seine Füllung die Kreise und das Gitter bedeckt.

  • Ich habe die Option verwendet, unit vector ratio = 1 1um sicherzustellen, dass die Einheiten auf jeder Achse mit der gleichen Länge dargestellt werden (das macht die Kreise zu tatsächlichen Kreisen und nicht zu Ellipsen).

  • clip=falsesorgt dafür, dass die linke und rechte Seite des grünen Rechtecks ​​nicht abgeschnitten werden (sonst würde die Hälfte der Linienbreite abgeschnitten – probieren Sie es aus).

Ein anderes Koordinatensystem könnte zum Zeichnen des Rechteckfeldes verwendet werden, dieses ist rel axis cs(sieheKoordinatensystem rel Achse csimpgfplots-Handbuch). In diesem Fall würden die Koordinaten nicht Ihren Datenwerten entsprechen. Stattdessen würde der Bereich [0,1] den Bereichen zugeordnet, die von den einzelnen Diagrammachsen abgedeckt werden (XUndjhier, aber das funktioniert auch mit 3D-Diagrammen). Mit anderen Worten könnte das grüne Rechteck auch so gezeichnet werden:

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

verwandte Informationen