Tikz 节点不采用绝对坐标值

Tikz 节点不采用绝对坐标值

这是我的第一篇帖子,所以如果我做错了什么,请纠正我。我想用节点绘制一个 tikzpicture,并在这里使用绝对坐标。我不知道为什么,但不知何故我的坐标似乎是相对的而不是绝对的。例如,在这个代码示例中,一个节点应该位于 (0,0),但却位于坐标系的负区域的某个位置。我做错了什么?

\documentclass[a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{pgfplots}
\tikzset{>=latex}
\begin{document}
\begin{tikzpicture}[scale=0.8]
\pgfplotsset{
width =0.9\textwidth,
height = 0.9\textwidth,
legend cell align=left,
legend pos=outer north east,
legend style={draw=none, anchor=north west, at={(1.1,1)},font=\Large,    
xmin=-124, xmax=160,
},
every tick label/.append style={font=\Large},
yticklabel style={text width=3em,align=right},
}

\begin{axis}[grid=major, ymin=-50, ymax=150]
\node(0) at (0,0)[rectangle,draw, minimum size = 5pt, fill = black,   
inner sep = 0pt]{};
\node(1) at (-5, 70)[minimum size = 3.7pt, fill= white, inner sep = 0pt, 
shape = circle, draw]{};
\node(2) at (-17, 69)[minimum size = 3.7pt, fill= white, inner sep = 0pt, shape = circle, draw]{};
\node(3) at (-19, 85)[minimum size = 3.7pt, fill= white, inner sep = 0pt, shape = circle, draw]{};
\node(4) at (9, 99)[minimum size = 3.7pt, fill= white, inner sep = 0pt, shape = circle, draw]{};
\node(5) at (15, 82)[minimum size = 3.7pt, fill= white, inner sep = 0pt, shape = circle, draw]{};

\end{axis}
\end{tikzpicture}
\end{document}

答案1

需要注意的是,你不仅使用 TiZ,还有 PGFPlots。如第 4.17.1 节(访问图形元素中的轴坐标)中所述手动的,PGFPlots 中有不同的坐标系:

  • axis cs:轴坐标系

  • rel axis cs:相对坐标系,其中完整的轴向量被规范化为 1

  • axis direction cs:允许使用相对位置和方向
  • axis description cs:对于(当然)轴描述很有用
  • ticklabel cs:,,,用于xticklabel cs:定位刻度标签yticklabel cs:zticklabel cs:
  • xticklabel* cs:、、yticklabel cs:zticklabel cs:无星号版本相同,但不考虑任何刻度标签的大小

全部这些与默认的 Ti 不同Z 坐标系。对于你的情况,你可能希望使用轴坐标系axis cs:,将节点放置在轴内的绝对坐标上。@Thruston在他的评论中说,你可以在这个(或上述任何其他)坐标系中放置一个节点

\node at (axis cs:0,0) {};

PGFPlots 的开发人员已将 PGFPlots 设计为完全向后兼容。新功能(会使旧图表在新版本中看起来不同)默认情况下处于禁用状态,必须手动启用。这可以通过以下方式完成

\pgfplotsset{compat=*version*}

其中*version*PGFPlots 版本号是,例如1.111.13。如评论中所示@Torbjørn T.从版本1.11开始,axis cs:坐标系是默认的,因此您不需要在每次使用时都指定它。因此,\pgfplotsset{compat=1.13}在您的序言中,图表将按照您的预期显示,而无需对您的代码进行任何更改。


小提示:您可以为每个绘制的点指定选项[minimum size=3.7pt, fill=white, inner sep=0pt, shape=circle, draw]。如果您以后想更改它,则必须遍历所有节点并进行更改。或者,您可以使用

\begin{tikzpicture}[scale=0.8,
    mydot/.style={minimum size=3.7pt, fill=white, inner sep=0pt, shape=circle, draw}
]
    \node[mydot] at (-5, 70) {};
\end{tikzpicture}

这样,您只需指定一次样式。

相关内容