使用 TikZ(和 pgfplots)的箭头尖端中心

使用 TikZ(和 pgfplots)的箭头尖端中心

箭头的默认行为显示在左图部分。如何才能实现“圆形”箭头尖端(见下图)在其中心结束,如右图所示,而无需手动调整?

如果它很重要:我需要它来标记 pgfplots 中曲线的起点和终点,但是我在 TikZ 中也多次错过了这个功能,所以我发布了更一般的问题。

箭头行为:最先进的技术和我所需要的。

\documentclass[tikz,border=5mm,convert]{standalone}

\usetikzlibrary{arrows}

\begin{document}

\begin{tikzpicture}
\draw [black!20] (-.2,-.2) grid (1.2,1.2);
\draw [<->] (0,0) -- (1,1);
\draw [o-*] (0,1) -- (1,0);
\begin{scope}[xshift=1.5cm]
  \draw [black!20] (-.2,-.2) grid (1.2,1.2);
  \draw [<->] (0,0) -- (1,1);
  \draw [o-*] (-.06,1.06) -- (1.06,-.06);
\end{scope}
\end{tikzpicture}

\end{document}

Ignasi 发布了一款适用于 pgfplots 的解决方案(感谢),但它没有集成到箭头“系统”中,必须手动指定长度。有没有提供这些功能的解决方案?


如果箭头尖端内有绘图坐标,则使用 pgfplots 的解决方案会产生奇怪的图形:

奇怪的情节

我认为这是一个功能,但不同的行为可能会有益。那么,是否有可能自动跳过箭头尖端内的坐标?使用填充来填充环并不是解决方案,因为它也会删除其他对象。以下是绘图的代码:

\documentclass[tikz,convert]{standalone}

\usetikzlibrary{arrows.meta}
\usepackage{pgfplots}

\begin{document}

\begin{tikzpicture}[markstart/.style={{Circle[open, length=4mm]}-,shorten <=-2mm}]
\begin{axis}[width=5cm]
\addplot [markstart] coordinates { (0,0) (0.01,0) (0.01,0.01) (0.04,0.03) (.5,.5) };
\end{axis}
\end{tikzpicture}

\end{document}

答案1

如果使用新的( TiKZ 3.0)库,长度可以固定,并且在帮助下,箭头圆中心可以移动到您想要的位置:arrows.metatipshorten

\documentclass[tikz,border=5mm,convert]{standalone}

\usetikzlibrary{arrows.meta}

\begin{document}

\begin{tikzpicture}
\draw [black!20] (-.2,-.2) grid (1.2,1.2);
\draw [<->] (0,0) -- (1,1);
\draw [{Circle[open]}-{Circle}] (0,1) -- (1,0);
\begin{scope}[xshift=1.5cm]
  \draw [black!20] (-.2,-.2) grid (1.2,1.2);
  \draw [<->] (0,0) -- (1,1);
  \draw [{Circle[open, length=1mm]}-{Circle[length=2mm]}, shorten >=-1mm, shorten <=-.5mm] (0,1) -- (1,0);
\end{scope}
\end{tikzpicture}

\end{document}

在此处输入图片描述

我认为存在一些定义尖端长度的变量并可用于自动计算shorten长度,但我不知道。

更新

如果只想标记曲线的起点和终点,可以使用或只是节点pgfplots,而不是tips和,正如您在评论中所说,或者用于arrowspgfplots markcircle如何在 pgfplots 中标记/标记文件中的第 n 个数据点?

除非你fill圈出或标记内部线条,否则会显示出来(如下图所示)。如果你知道绘制曲线需要多少个坐标,你可以使用它mark repeat来绘制一条只在起点和终点处有标记的曲线。

\documentclass[tikz,border=5mm,convert]{standalone}

\usepackage{pgfplots}

\begin{document}

\begin{tikzpicture}[markstart/.style={{Circle[open, length=4mm] .}-,shorten <=-2mm}]
\begin{axis}[width=5cm]
\addplot [mark=none] coordinates { (0,0) (0.01,0) (0.01,0.01) (0.04,0.03) (.5,.5) } node[circle, minimum size=2pt,inner sep=0pt,draw,pos=0]{} node[circle, minimum size=2pt,inner sep=0pt,draw,pos=1]{};

\addplot [mark=o, mark repeat=4] coordinates { (0,0.4) (0.01,0.39) (0.01,0.35) (0.04,0.32) (.5,.0) };
\end{axis}
\end{tikzpicture}

\end{document}

在此处输入图片描述

答案2

虽然这并不确切地回答你的问题,它确实提供了一种方法,让圆圈(填充或不填充)位于你想要的位置没有必须做出一些调整。

\documentclass[tikz,border=5mm,convert]{standalone}

\usetikzlibrary{arrows}

\begin{document}

\begin{tikzpicture}
\draw [black!20] (-.2,-.2) grid (1.2,1.2);

  \node[circle,inner sep=1pt,draw] (A) at (0,1) {};
  \node[circle,inner sep=1pt,draw,fill] (B) at (1,0) {};
  \draw (A) -- (B);

\draw [<->] (0,0) -- (1,1);
\end{tikzpicture}

\end{document}

在此处输入图片描述

您可以通过定义终端节点的样式甚至定义宏来实现这一点,从而稍微整理一下,如下所示:

相关内容