將同心橢圓變成帶有矩形補丁的同心圓

將同心橢圓變成帶有矩形補丁的同心圓

我想繪製兩個圖的混合。這是我的起源代碼:

\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}當你積極致力於情節並要解決所有問題時可能沒問題,但是然後更好地對版本進行硬編碼,以確保您的繪圖在將來重新編譯時不會默默地產生不同的結果。
    從本質上講,say 的\pgfplotsset{compat=1.16}意思是:「我已經驗證該圖在pgfplots相容性等級 1.16 下運作良好,我希望每次重新編譯時都有相同的行為。只有當我準備好解決因更改而引入的潛在問題時,pgfplots我才會切換到更新的兼容性級別(當更新的版本pgfplots出現時,1.16 是此時的最新版本)」。

  • 我用一個\pgfplotsinvokeforeach循環來畫圓圈;

  • axis cs我使用隱式座標系(從相容等級 1.11 開始隱式)繪製了矩形;

  • 我在圓圈後面畫了它,以確保它的填充覆蓋了圓圈和網格;

  • 我使用選項unit vector ratio = 1 1來確保每個軸上的單位以相同的長度表示(這就是使圓成為實際圓而不是橢圓的原因)。

  • clip=false確保綠色矩形​​的左側和右側不被修剪(否則線寬的一半將被修剪 - 嘗試)。

可以使用另一個座標系來繪製矩形面片,這是rel axis cs(參見座標系 rel axis cs在裡面pgfplots 手冊)。在這種情況下,座標將不對應於您的資料值;相反,[0,1] 範圍將映射到每個繪圖軸所涵蓋的範圍(Xy此處,但這也適用於 3D 繪圖)。換句話說,綠色矩形也可以這樣繪製:

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

相關內容