箭头作为情节标记

箭头作为情节标记

我想画一个情节,并把箭头指向情节的方向而不是标记。

我的第一个想法是使用quiver选项pgfplots复制和分段数据表的列。但是我没有成功。此外,这需要一些额外的操作,并且如果只需要绘制一个弯曲箭头,那么灵活性就不高。

我的第二个想法是获取节点并绘制 tikz 路径。我考虑过nodes near coord但没有找到任何方法来在axis命令之外检索节点名称。

我最终使用修饰符得到了以下代码(如这个问题):

\documentclass{article}
\usepackage{pgfplots}

 \usetikzlibrary{decorations.markings}

\begin{document}
\pgfplotstableread {%
1 0
0.9424764947 0.07142857143
0.8807513856 0.1428571429
0.814278019 0.2142857143
0.7433146111 0.2857142857
0.6680059078 0.3571428571
0.5883915727 0.4285714286
0.5054583078 0.5
0.4203175805 0.5714285714
 0.3328127843 0.6428571429
 0.2485549667 0.7142857143
 0.1694124286 0.7857142857
 0.09704848952 0.8571428571
 0.03951561078 0.9285714286
 0 1
}\table
\begin{tikzpicture}[baseline, trim axis left, trim axis right]
  \pgfplotsset{ref/.style={mark=o}}
  \begin{axis}
    \addplot[ref] table[x index=0, y index=1] {\table}
    [postaction={decorate, decoration={markings,
        mark=between positions 1/15 and 1 step 1/15 with {\arrow[red,line width=.5pt]{>};}
      }}]
    ;

  \end{axis}
\end{tikzpicture}

\end{document}

结果如下:

红箭应该代替圆圈

问题是让红色箭头位于圆圈所在位置。该怎么做?


以下两个问题是相关的,但我的主要问题是从表输入中获取节点。

用节点处的箭头装饰路径

如何用特定坐标处的箭头装饰路径?


我为了解决另一个问题而提出的以下问题恰好也适用于此处:

命名近坐标节点的节点

事实上,一旦节点有了名字,pgf就可以追踪某些路径来链接它们。

答案1

我看到你没有使用任何平滑算法,所以每条箭头线都与每条线段平行。然后,你可以绘制多条相互连接的箭头线,而不是绘制多边形链(pgfplots 支持 TiZ 箭头样式)。为此,您需要通过 pgfplotstable 命令从表中一次选择两行连续的行。

\documentclass{article} 
\usepackage{pgfplots} 

\begin{document} 
\pgfplotstableread {% 
1 0 
0.9424764947 0.07142857143 
0.8807513856 0.1428571429 
0.814278019 0.2142857143 
0.7433146111 0.2857142857 
0.6680059078 0.3571428571 
0.5883915727 0.4285714286 
0.5054583078 0.5 
0.4203175805 0.5714285714 
0.3328127843 0.6428571429 
0.2485549667 0.7142857143 
0.1694124286 0.7857142857 
0.09704848952 0.8571428571 
0.03951561078 0.9285714286 
0 1 
}\table

\pgfplotstablegetrowsof{\table} 
\pgfmathsetmacro{\rows}{\pgfplotsretval-2}

\begin{tikzpicture} [baseline, trim axis left, trim axis right] 
\begin{axis}
\foreach \k in {0,...,\rows}
  {
   \pgfplotstablegetelem{\k}{[index]0}\of\table 
   \let\x\pgfplotsretval
   \pgfplotstablegetelem{\k}{[index]1}\of\table 
   \let\y\pgfplotsretval
   \pgfmathsetmacro{\K}{\k+1}
   \pgfplotstablegetelem{\K}{[index]0}\of\table 
   \let\X\pgfplotsretval
   \pgfplotstablegetelem{\K}{[index]1}\of\table 
   \let\Y\pgfplotsretval
   \addplot [blue,->] coordinates {(\x,\y) (\X,\Y)};
  }
\end{axis} 
\end{tikzpicture} 
\end{document}

在此处输入图片描述

\k 从表格的第 0 行到倒数第二行,\K 从第 1 行到倒数第二行,这样就可以画出 n-1 个连续的箭头段。每一步,你都会得到起点的坐标 (\x,\y) 和终点的坐标 (\X,\Y),然后画出一个箭头段。

也许有更快、更简单、更优雅的方法来做到这一点,但我不知道。

相关内容