pgfplots,toks,引脚边缘的位置

pgfplots,toks,引脚边缘的位置

我想使用图钉注释图表中的特定点。当我使用边缘时,->效果很好。但如果我使用*-例如,那么点的中心不在它应该在的位置。也许这是问题anchor。以下是一个例子:

\documentclass[]{article}

\usepackage{tikz}
\usepackage{pgfplots}
\usepgflibrary{arrows}

\begin{document}

\begin{tikzpicture}
\begin{axis}%
[
axis y line = left,
axis x line = middle,
grid
]
\addplot[mark=none,domain=0:5] {x}; 
\node%
[
coordinate,
pin={[pin edge={*-}]50:{text}}
] 
at (axis cs:2,1) {};
%
\node%
[
coordinate,
pin={[pin edge={red}]-50:{text}}
] 
at (axis cs:2,1) {};
\end{axis}
\end{tikzpicture}

\end{document}

导致

在此处输入图片描述

特写显示了问题:

在此处输入图片描述

有任何想法吗?

答案1

发生这种情况是因为圆圈被视为箭头,因此它与线尾齐平。您可以使用语法shorten <(参见修改*o设置 tikz 箭头的样式,使其位于行尾的中心)来手动调整位置,或者您可以定义一个新的箭头(基于标准箭头)以将圆精确定位在指定的坐标上:

\documentclass[]{standalone}

\usepackage{tikz}
\usepackage{pgfplots}
\usepgflibrary{arrows}

\makeatletter
\pgfarrowsdeclare{center*}{center*}
{
  \pgfutil@tempdima=0.4pt%
  \advance\pgfutil@tempdima by.2\pgflinewidth%
  \pgfutil@tempdimb=5.5\pgfutil@tempdima\advance\pgfutil@tempdimb by\pgflinewidth
  \pgfarrowsleftextend{0pt}
  \pgfutil@tempdimb=1.5\pgfutil@tempdima\advance\pgfutil@tempdimb by.5\pgflinewidth
  \pgfarrowsrightextend{0pt}
}
{
  \pgfutil@tempdima=0.4pt%
  \advance\pgfutil@tempdima by.2\pgflinewidth%
  \pgfsetdash{}{+0pt}
  \pgfpathcircle{\pgfqpoint{0pt}{0pt}}{+4.5\pgfutil@tempdima}
  \pgfusepathqfillstroke
}

\makeatother

\begin{document}

\begin{tikzpicture}
\begin{axis}%
[
axis y line = left,
axis x line = middle,
grid
]
\addplot[mark=none,domain=0:5] {x}; 
\node%
[
coordinate,
pin={[pin edge={center*-}]50:{text}}
] 
at (axis cs:2,1) {};
%
\node%
[
coordinate,
pin={[pin edge={red}]-50:{text}}
] 
at (axis cs:2,1) {};
\end{axis}

\end{tikzpicture}

\end{document}

相关内容