
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:
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}
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]
);pgfplots
Kompatibilitä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 mitpgfplots
Kompatibilitä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,pgfplots
werde ich auf eine neuere Kompatibilitätsstufe umsteigen (wenn neuere Versionen vonpgfplots
herauskommen – 1.16 ist zu diesem Zeitpunkt die neueste)“.Ich habe eine
\pgfplotsinvokeforeach
Schleife verwendet, um die Kreise zu zeichnen.Ich habe das Rechteck mithilfe des impliziten
axis cs
Koordinatensystems 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 1
um 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=false
sorgt 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);