将同心椭圆变成带矩形面片的同心圆

将同心椭圆变成带矩形面片的同心圆

我想绘制两个图表的混合。这是我的原点代码:

\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}意思是:“我已经验证了这个图在pgfplots兼容级别 1.16 下运行良好,我希望每次重新编译时都有相同的行为。只有当我准备好修复由 的更改引入的潜在问题时,pgfplots我才会切换到较新的兼容级别(当 的较新版本pgfplots出现时——1.16 是目前最新的版本)”。

  • 我用了一个\pgfplotsinvokeforeach循环来画圆圈;

  • axis cs我使用隐式坐标系(自兼容级别 1.11 起隐式)绘制了矩形;

  • 我在圆圈后面画它,以确保它的填充覆盖圆圈和网格;

  • 我使用选项unit vector ratio = 1 1来确保每个轴上的单位以相同的长度表示(这使得圆圈成为实际的圆圈而不是椭圆形)。

  • clip=false确保绿色矩形的左右边不被修剪(否则线宽的一半会被修剪——试试看)。

可以使用另一个坐标系来绘制矩形面片,即rel axis cs(参见坐标系 rel 轴 cs在里面pgfplots 手册)。在这种情况下,坐标不会对应于您的数据值;相反,[0,1] 范围将映射到每个绘图轴所覆盖的范围(X此处,但这也适用于 3D 图)。换句话说,绿色矩形也可以这样绘制:

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

相关内容