我想画一个情节,并把箭头指向情节的方向而不是标记。
我的第一个想法是使用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 支持 Ti钾Z 箭头样式)。为此,您需要通过 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),然后画出一个箭头段。
也许有更快、更简单、更优雅的方法来做到这一点,但我不知道。