我想绘制两个图表的混合。这是我的原点代码:
\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);