
두 다이어그램을 혼합하여 그려보고 싶습니다. 원점에 대한 내 코드는 다음과 같습니다.
\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}
동심원을 그리려고 했는데 결국 타원이 생겼습니다. 이 문제를 어떻게 해결할 수 있는지 알고 싶습니다.
두 번째 문제는 다음과 같습니다. 이미지 뒤에 직사각형 패치를 추가하고 싶습니다.
나는 이 두 가지 문제로 어려움을 겪고 있습니다. 타원을 원으로 바꾸고 그 위에 직사각형 패치를 배치하는 것입니다.
답변1
다음을 사용할 수 있습니다.
\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}
노트:
tikzpicture
(\begin{tikzpicture}[scale=1.5][x=1cm,y=1cm]
는 올바르지 않습니다. 다음과 같은 것을 사용하는 것이 좋습니다\begin{tikzpicture}[scale=1.5, x=1cm,y=1cm]
) 에 여러 선택적 인수를 전달하지 마십시오 .pgfplots
호환성 수준 1.11은 약간 오래되었으므로 1.16으로 올렸습니다.\pgfplotsset{compat=newest}
플롯 작업을 적극적으로 수행하고 모든 문제를 해결하려고 할 때는 괜찮을 수 있지만그 다음에나중에 다시 컴파일할 때 플롯이 자동으로 다른 결과를 생성하지 않도록 버전을 하드코딩하는 것이 좋습니다.
본질적으로 말하는 것은\pgfplotsset{compat=1.16}
다음과 같습니다. “이 플롯이 호환성 수준 1.16에서 제대로 작동하는지 확인했습니다pgfplots
. 다시 컴파일할 때마다 동일한 동작을 원합니다. 변경 사항으로 인해 발생할 수 있는 잠재적인 문제를 해결할 준비가 된 경우에만pgfplots
최신 호환성 수준으로 전환합니다(최신 버전이pgfplots
출시되면 현재 시점에서는 1.16이 최신 버전임).”저는
\pgfplotsinvokeforeach
루프를 사용하여 원을 그렸습니다.axis cs
나는 암시적 좌표계(호환성 수준 1.11부터 암시적)를 사용하여 직사각형을 그렸습니다 .채우기가 원과 격자를 덮는지 확인하기 위해 원 뒤에 그렸습니다.
각 축의 단위가 동일한 길이로 표시되도록 옵션을 사용했습니다
unit vector ratio = 1 1
(이것이 타원이 아닌 원을 실제 원으로 만드는 것입니다).clip=false
녹색 직사각형의 왼쪽과 오른쪽이 잘리지 않았는지 확인합니다(그렇지 않으면 선 너비의 절반이 잘립니다. 시도해 보십시오).
직사각형 패치를 그리는 데 또 다른 좌표계를 사용할 수 있습니다 rel axis cs
.좌표계 상대 축 cs에서pgfplots 매뉴얼). 이 경우 좌표는 데이터 값과 일치하지 않습니다. 대신, [0,1] 범위는 각 플롯 축이 포함하는 범위에 매핑됩니다(엑스그리고와이여기서는 3D 플롯에서도 작동합니다. 즉, 녹색 직사각형을 다음과 같이 그릴 수도 있습니다.
\draw[green, thick, fill=white]
(rel axis cs:0,0.45) rectangle (rel axis cs:1,0.55);