
我想繪製兩個圖的混合。這是我的起源代碼:
\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] 範圍將映射到每個繪圖軸所涵蓋的範圍(X和y此處,但這也適用於 3D 繪圖)。換句話說,綠色矩形也可以這樣繪製:
\draw[green, thick, fill=white]
(rel axis cs:0,0.45) rectangle (rel axis cs:1,0.55);