为什么这个 Tikz 范围坐标系是倾斜的?

为什么这个 Tikz 范围坐标系是倾斜的?

我正在尝试创建一个简单的图形,其中刻度标签无法正确对齐,因为坐标系倾斜。这是 MWE 代码:

\documentclass[a4paper,twocolumn]{article}

\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{arrows,shapes,positioning}

\begin{document}

\begin{figure}
    \begin{center}
        \begin{tikzpicture}
            \node[anchor=south west, inner sep=0] (image) at (0.3,0.2) {\includegraphics[width=0.8\columnwidth]{asmmodes}};
            \begin{scope}[x={(image.south east)},y={(image.north west)}]
                \draw (-0.02, 0.833) node [right]{1};
                \draw (-0.02, 0.5) node [right]{2};
                \draw (-0.02, 0.167) node [right]{3};
                \draw (0.07, -0.03) node [text centered,above]{-4};
                \draw (0.22, -0.03) node [text centered,above]{-2};
                \draw (0.37, -0.03) node [text centered,above]{-1};
                \draw (0.50, -0.03) node [text centered,above]{0};
                \draw (0.65, -0.03) node [text centered,above]{1};
                \draw (0.79, -0.03) node [text centered,above]{2};
                \draw (0.94, -0.03) node [text centered,above]{4};
                \draw (0.5, -0.03) node [text centered,below]{standard deviations};
                \draw (-0.04, 0.5) node [text centered]{\rotatebox{90}{first three model shape parameters}};
                \draw [thick,red] (0,0) -- (0,1) -- (1,1) -- (1,0) -- cycle;
            \end{scope}
        \end{tikzpicture}
    \end{center}
    \label{fig:asmmodes1}
\end{figure}

\end{document}

这给了我以下输出: 问题示例

如您所见,由于坐标系倾斜,刻度标签排列不整齐。我不知道该怎么做。有人能帮我吗?

答案1

第一个问题:当你改变xy而不改变原点时,你的轴就不正交了。你必须将原点移至image.south west

第二个问题:由于不为空,所以的锚点image不在所包含图像的边框上outer sep。您必须添加outer sep=0以删除此边距。

\rotatebox您可以使用rotate选项来代替。

在此处输入图片描述

\documentclass[margin=1mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
  \node[anchor=south west, inner sep=0,outer sep=0] (image)
  at (0.3,0.2) {\includegraphics[width=0.8\columnwidth] {example-image-a}};
  \begin{scope}[
    shift=(image.south west),
    x={(image.south east)},y={(image.north west)}
    ]
    \draw (-0.02, 0.833) node [right]{1};
    \draw (-0.02, 0.5) node [right]{2};
    \draw (-0.02, 0.167) node [right]{3};
    \draw (0.07, -0.03) node [text centered,above]{-4};
    \draw (0.22, -0.03) node [text centered,above]{-2};
    \draw (0.37, -0.03) node [text centered,above]{-1};
    \draw (0.50, -0.03) node [text centered,above]{0};
    \draw (0.65, -0.03) node [text centered,above]{1};
    \draw (0.79, -0.03) node [text centered,above]{2};
    \draw (0.94, -0.03) node [text centered,above]{4};
    \draw (0.5, -0.03) node [text centered,below] {standard deviations};
    \draw (-0.04, 0.5) node [text centered,rotate=90] {first three model shape parameters};
  \end{scope}
\end{tikzpicture}
\end{document}

答案2

问题实际上并不是转移,尽管它有帮助,因为它将坐标系带回到正交的常规轴。

问题是

\begin{scope}[x={(image.south east)},y={(image.north west)}]

这会使 x 和 y 单位向量扭曲,因为它并不完全垂直,我猜是因为(!) outer sep

答案3

在尝试了 Paul 和 Gonzalo 的建议后,我能够解决这个问题。我觉得 Gonzalo 的建议是将图像节点移回 (0, 0),这实际上解决了问题的根源。因此,我将描述图像节点的行更改为以下内容:

\node[anchor=south west, inner sep=0] (image) at (0, 0) {\includegraphics[width=0.9\columnwidth]{asmmodes}};

这给了我以下(期望的)结果:

问题解决了

谢谢你的协助。

[编辑]PaulGaborit 的答案实际上解决了这个问题。我的更改(记录在此答案中)只是避免了这个问题。

相关内容