
Im folgenden MWE ist es mein Ziel, die Pfeile in die beliebige Richtung zeigen zu lassen, die durch die dritte Spalte der Daten vorgegeben ist.
Nach dem Lesen einiger Antworten (zum Beispiel von Dr. FeursängerDortoderdiese andere Frage), begann ich, meinen Marker zu definieren, in der Hoffnung, ihn drehen zu können. Ich kam nicht weiter. Gibt es eine einfache Lösung? Das Bild wird generiert mit:
\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}
Bearbeiten
Basierend auf der Antwort aufdiese Frage, ich habe versucht, meinen Code wie folgt zu aktualisieren. Dies schlägt mit fehl Undefined control sequence \yaw
. Übersehe ich etwas bei der Verwendung der Option und bei \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}
Antwort1
Ich würde dies mithilfe eines Köcherdiagramms anstelle rotierender Markierungen tun:
\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}