
В следующем примере моя цель — сделать так, чтобы стрелки указывали в произвольном направлении, заданном третьим столбцом данных.
Прочитав некоторые ответы (например, от доктора Фойрзенгератамилиэтот другой вопрос), я начал определять свой маркер, в надежде повернуть его. Я не мог продвинуться дальше. Есть ли простое решение? Изображение генерируется с помощью:
\documentclass{standalone}
\usepackage{pgfplots}
\begin{document}
\pgfplotstableread{
5.30E-001 5.30E-001 -7.85E-001
5.96E-001 5.89E-001 -7.85E-001
6.69E-001 6.39E-001 -7.85E-001
7.47E-001 6.81E-001 -7.85E-001
8.29E-001 7.13E-001 -7.85E-001
9.14E-001 7.36E-001 -7.84E-001
1.00E+000 7.48E-001 -7.81E-001
1.09E+000 7.49E-001 -7.72E-001
1.18E+000 7.41E-001 -7.55E-001
1.26E+000 7.22E-001 -7.28E-001
1.35E+000 6.93E-001 -6.91E-001
1.43E+000 6.54E-001 -6.43E-001
1.50E+000 6.07E-001 -5.88E-001
1.57E+000 5.51E-001 -5.25E-001
1.63E+000 4.87E-001 -4.57E-001
1.68E+000 4.17E-001 -3.85E-001
1.73E+000 3.40E-001 -3.11E-001
1.76E+000 2.60E-001 -2.34E-001
1.79E+000 1.75E-001 -1.57E-001
1.81E+000 8.82E-002 -7.85E-002
}\datatable
\begin{tikzpicture}[trim axis left, trim axis right]
\pgfdeclareplotmark{yawarrow}{%
\draw[->] (0,0)--(0,100);
}
\begin{axis}
[
xlabel={$x$},
ylabel={$y$},
]
\addplot[%
mark=yawarrow,
% mark options={rotate=\thisrowno{2}}, % This won't work
black] table[x index={0},y index={1}] {\datatable};
\end{axis}
\end{tikzpicture}
\end{document}
Редактировать
На основании ответа наэтот вопрос, я попытался обновить свой код следующим образом. Это не срабатывает с Undefined control sequence \yaw
. Я что-то упускаю в использовании опции и в \yaw
?
\pgfplotstablegetrowsof{\datatable}
\pgfmathsetmacro{\rows}{\pgfplotsretval-2}
\begin{tikzpicture}[trim axis left, trim axis right]
\pgfdeclareplotmark{yawarrow}{%
\draw[->] (0,0)--(0,100);
}
\begin{axis}
[
xlabel={$x$},
ylabel={$y$},
]
\foreach \k in {0,...,\rows}
{
\pgfplotstablegetelem{\k}{[index]0}\of\datatable
\let\x\pgfplotsretval
\pgfplotstablegetelem{\k}{[index]1}\of\datatable
\let\y\pgfplotsretval
\pgfplotstablegetelem{\k}{[index]2}\of\datatable
\let\yaw\pgfplotsretval
\pgfmathsetmacro{\K}{\k+1}
\pgfplotstablegetelem{\K}{[index]0}\of\datatable
\let\X\pgfplotsretval
\pgfplotstablegetelem{\K}{[index]1}\of\datatable
\let\Y\pgfplotsretval
\addplot [
mark=yawarrow,
mark options={rotate=\yaw}, %Won't work either
] coordinates {(\x,\y) (\X,\Y)};
}
\end{axis}
\end{tikzpicture}
решение1
Я бы сделал это, используя график колебаний вместо вращающихся маркеров:
\documentclass[border=5mm]{standalone}
\usepackage{pgfplots}
\usepackage{filecontents}
\begin{document}
\begin{filecontents}{data.dat}
5.30E-001 5.30E-001 -7.85E-001
5.96E-001 5.89E-001 -7.85E-001
6.69E-001 6.39E-001 -7.85E-001
7.47E-001 6.81E-001 -7.85E-001
8.29E-001 7.13E-001 -7.85E-001
9.14E-001 7.36E-001 -7.84E-001
1.00E+000 7.48E-001 -7.81E-001
1.09E+000 7.49E-001 -7.72E-001
1.18E+000 7.41E-001 -7.55E-001
1.26E+000 7.22E-001 -7.28E-001
1.35E+000 6.93E-001 -6.91E-001
1.43E+000 6.54E-001 -6.43E-001
1.50E+000 6.07E-001 -5.88E-001
1.57E+000 5.51E-001 -5.25E-001
1.63E+000 4.87E-001 -4.57E-001
1.68E+000 4.17E-001 -3.85E-001
1.73E+000 3.40E-001 -3.11E-001
1.76E+000 2.60E-001 -2.34E-001
1.79E+000 1.75E-001 -1.57E-001
1.81E+000 8.82E-002 -7.85E-002
\end{filecontents}
\begin{tikzpicture}
\begin{axis}
[
xlabel={$x$},
ylabel={$y$},
]
\addplot[quiver={
u={sin(\thisrowno{2} r + 90)},
v={cos(\thisrowno{2} r + 90)},
scale arrows=0.1
}, -latex] table[x index={0},y index={1}] {data.dat};
\addplot [thick] table {data.dat};
\end{axis}
\end{tikzpicture}
\end{document}