Seitdiese Frageist vielleicht überladen und enthält zu viele unnötige Details, ich habe versucht, es in eine komprimiertere und umfassendere Form umzuformulieren.
Das Problem ist, dass ich in einem eigenen Codestück, in quiver/after arrow/.code
, oder alternativ in auf die Koordinaten (x,y,u,v) des Quiver-Plots zugreifen möchte quiver/before arrow/.code
. Das folgende Beispiel ergibt nicht ganz Sinn, da man einfach die u- und v-Werte ändern könnte. Das Problem ist jedoch genau das gleiche wie in meiner anderen Frage.
Im Code habe ich einen Kommentar hinzugefügt, wo ich versuche, auf die Koordinaten zuzugreifen und wo verschiedene nicht funktionierende Möglichkeiten auskommentiert sind.
\documentclass[]{standalone}
\usepackage{tikz,pgfplots}
\usetikzlibrary{calc} \pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
\begin{axis}[axis equal image,enlargelimits=false,clip=false]
% Reference plot
\addplot[
quiver={
u=x,v=y,
},
->,
samples=5,domain=0:1
] {x*x};
% own plot
\addplot[
quiver={
u=x,v=y,
% draw some other (e.g. orthogonal) arrows here!
after arrow/.code={
\draw[blue,dashed,->] (0.5,0.25) -- ($ (0.5,0.25) + (0.25,-0.5)$);
\draw[blue,dashed,->] (1,1) -- ($ (1,1) + (1,-1)$);
%
%
% Things which are not working
%
%
%\draw[blue,dashed,->] (x,y) -- ($ (x,y) + (v,-u)$);
%\draw[blue,dashed,->] (\x,\y) -- ($ (\x,\y) + (\v,-\u)$);
%\draw[blue,dashed,->] (\pgfplots@current@point@x,\pgfplots@current@point@y) -- ($ (\pgfplots@current@point@x,\pgfplots@current@point@y) + (\pgfplots@quiver@v,-\pgfplots@quiver@u)$);
};
},
draw=none,
samples=5,domain=0:1
] {x*x};
\end{axis}
\end{tikzpicture}
\end{document}
Antwort1
Derzeit ist das Design von quiver
sehr unflexibel. Beim Zeichnen der Pfeile werden die (x,y)-Koordinaten in und gespeichert \pgf@x
und \pgf@y
die (u,v)-Koordinaten in absolute Koordinaten übersetzt. Sie haben keine große Auswahl.
Vielleicht können Sie die gleiche Funktion zweimal mit unterschiedlichen darstellen quiver
.
\documentclass[border=9,tikz]{standalone}
\usepackage{pgfplots}\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
\begin{axis}[axis equal]
% Reference plot
\addplot[
quiver={u=x,v=y},
->,
samples=10,domain=0:1
] {x*x};
% own plot
\addplot[
quiver={u=y,v=-x},
->,blue,
samples=10,domain=0:1
] {x*x};
\end{axis}
\end{tikzpicture}
\end{document}
Eine fragile Möglichkeit, auf die relativen Koordinaten von (u,v) zuzugreifen
\documentclass[border=9,tikz]{standalone}
\usepackage{pgfplots}\pgfplotsset{compat=newest}
\begin{document}
\makeatletter
\def\pgfplotsplothandlerquiver@vis@path#1{%
% remember (x,y) in a robust way
#1%
\pgfmathsetmacro\pgfplots@quiver@x{\pgf@x}%
\pgfmathsetmacro\pgfplots@quiver@y{\pgf@y}%
% calculate (u,v) in relative coordinate
\pgfplotsaxisvisphasetransformcoordinate\pgfplots@quiver@u\pgfplots@quiver@v\pgfplots@quiver@w%
\pgfplotsqpointxy{\pgfplots@quiver@u}{\pgfplots@quiver@v}%
\pgfmathsetmacro\pgfplots@quiver@u{\pgf@x-\pgfplots@quiver@x}%
\pgfmathsetmacro\pgfplots@quiver@v{\pgf@y-\pgfplots@quiver@y}%
% move to (x,y) and start drawing
{%
\pgftransformshift{\pgfpoint{\pgfplots@quiver@x}{\pgfplots@quiver@y}}%
\pgfpathmoveto{\pgfpointorigin}%
\pgfpathlineto{\pgfpoint\pgfplots@quiver@u\pgfplots@quiver@v}%
}%
}%
\begin{tikzpicture}
\begin{axis}[axis equal]
\addplot[
quiver={u=x,v=y,
after arrow/.code={
\relax{% always protect the shift
\pgftransformshift{\pgfpoint{\pgfplots@quiver@x}{\pgfplots@quiver@y}}%
\node[below right]{\tiny$(u,v)=(\pgfplots@quiver@u,\pgfplots@quiver@v)$};
}
}
},
->,
samples=10,domain=-1:1
] {x*x};
\end{axis}
\end{tikzpicture}
\end{document}
Haftungsausschluss
Derzeit before arrow
wird after arrow
es an keiner anderen Stelle im Paket verwendet. Die Tatsache, dass (u,v) absolute Koordinaten hat, könnte sich in Zukunft ändern.