如何在 Tikz 中定义坐标?

如何在 Tikz 中定义坐标?

我很难弄清楚 Tikz 如何决定如何将我提供的 2d 坐标映射到我给它绘制的区域。有时它似乎会根据我在其中绘制的内容自动调整大小,从而导致我绘制边框来定义我的范围,但其他时候它似乎不遵循该规则。

这很令人困惑,而且很难找到文档。我找到了几百页的 pdf 文件,但它们似乎遗漏了很多命令 - 比如 tkzInit,它看起来可能可以做我想要的事情,但我找不到文档来证实这一点,而且我的测试表明它不能做我想要的事情!

例如,我希望它绘制 4 个正方形,但它却绘制了 4 个长度是宽度两倍的矩形。

    \begin{tikzpicture}[x=8cm,y=4cm]
        \tkzInit[xmax=2,ymax=1,xmin=0,ymin=0]
        % border
        \draw (-0.1,-0.2) rectangle (2,1.2);

        \foreach \x in {0,...,4}
            \draw (\x * 0.1 - 0.05,0.45) rectangle (\x * 0.1 + 0.05, 0.55);

    \end{tikzpicture}

在这种情况下,我希望我的窗口宽度是高度的两倍,并在内部使用坐标 (0,0) 到 (2,1)。我可能还想稍微填充边缘并添加边框。

谁能告诉我我做错了什么?

谢谢你!!

答案1

除了 cfr 所说的[x=8cm,y=4cm]为 x 和 y 轴设置步骤之外,还有一种更简单的方法来做同样的事情(红色是我的)。

输出

图1

代码

 \documentclass[margin=10pt]{standalone}
\usepackage{tikz}%, tkz-euclide}
%\usetkzobj{all}

\begin{document}
 \begin{tikzpicture}%[x=8cm,y=4cm]
        %\tkzInit[xmax=2,ymax=1,xmin=0,ymin=0]
        % border
       % \draw (-0.1,-0.2) rectangle (2,1.2);
    \begin{scope}[x=1mm, y=1mm]
    \foreach \x in {0,...,4}{
        \draw[red] (\x,0) rectangle ({\x+1},1);
    }
    \end{scope}

    \begin{scope}[xshift=.5mm]
    \foreach \x in {0,...,4}
        \draw (\x * 0.1 - 0.05,0.25) rectangle (\x * 0.1 + 0.05, 0.35);
    \end{scope}
    \end{tikzpicture}
\end{document}

答案2

您的矩形来自第一行,您在那里写入[x=8cm,y=4cm]。这重新定义了用于 x 和 y 的单位。使用 重试您的代码,[x=4cm,y=4cm]甚至完全删除它,看看会发生什么。我擅自更改了您的矩形定义代码,使用相对坐标计算,使用++(0.1,0.1)。这样,计算正方形所需的坐标时就不需要考虑那么多了。

\begin{tikzpicture}[x=4cm,y=4cm]
        \tkzInit[xmax=2,ymax=1,xmin=0,ymin=0]
        % border
        \draw (-0.1,-0.2) rectangle (2,1.2);

        \foreach \x in {0,...,4}
            \draw (\x * 0.1 - 0.05,0.45) rectangle ++(0.1,0.1);
\end{tikzpicture}

答案3

/tikz/x=<dimension>和的使用/tikz/y=<dimension>记录在 TikZ 手册第 25.2 节(目前为第 358-9 页)。

粗略地说,x=8cm表示方向上的每个单位x8cm。对于 也是如此y。因此,如果您将 传递x=8cm, y=4cmtikzpicture环境,则(1,1)8cm在原点的右侧4cm上方。因此,(0,0) rectangle (1,1)将是矩形而不是正方形。要获得正方形,您需要(0,0) rectangle (.5,1)补偿您指定的单位的不同大小。

可能你想要的是更像这样的东西。(我注释掉了这个\tkzInit命令,因为我不知道它来自哪里。)

\documentclass[12pt,tikz]{standalone}

\begin{document}
  \begin{tikzpicture}
%   \tkzInit[xmax=2,ymax=1,xmin=0,ymin=0]% what package or library defines this?
    % window
    \path (-4cm,-2cm) rectangle (4cm,2cm);
    % border
    \draw (-0.1,-0.2) rectangle (2,1.2);

    \foreach \x in {0,...,4}
    \draw (\x * 0.1 - 0.05,0.45) rectangle (\x * 0.1 + 0.05, 0.55);

  \end{tikzpicture}
\end{document}

带有小图片的窗口

更可能的是,您要么想要指定,比如说,x=4cm, y=4cmx=8cm, y=8cm窗口内的图片放大,要么想要更改图片内的坐标,这样您就不会有这么大的边框。而且很可能图像也应该居中。

您可能想使用backgrounds库来实现这一点。下面,我将图片放在一个\fbox位置,以显示“窗口”的边框与绘制的边框(显示为绿色)的对比。蓝色用于在图片内进行绘制。

\documentclass[12pt]{article}
\usepackage{tikz}
\usetikzlibrary{backgrounds}
\begin{document}
  \fbox{\begin{tikzpicture}[inner frame sep=5pt, draw=blue, background rectangle/.style={draw=green}, show background rectangle]
%   \tkzInit[xmax=2,ymax=1,xmin=0,ymin=0]% what package or library defines this?

    \foreach \x in {0,...,4}
    \draw (\x * 0.1 - 0.05,0.45) rectangle (\x * 0.1 + 0.05, 0.55);

  \end{tikzpicture}}
\end{document}

有界

相关内容