
Ich habe also das Vektorfeld ${x^2+2*x*y,y^2+2*x*y}
und möchte „Streams“ zeichnen. quiver
Es pgfplots
werden Pfeile erzeugt (die ich normalisiere), aber ich denke, dass Streams die Dinge leichter verständlich machen würden. Hier ist ein, StreamPlot
das Mathematica erstellt.
Ich möchte in der Lage sein, so etwas mit zu erstellen, um pgfplots
die Stilkonsistenz beizubehalten. Wenn ich vielleicht die Punkte extrahieren könnte, die die Kurven erzeugen, könnte ich diese mit darstellen pgfplots
.
Antwort1
Ich habe das hier verwendet:https://mathematica.stackexchange.com/questions/19859/plot-extract-data-to-a-filezunächst. Das erste Element im Plot dynamicalStream
war eine leere Zeichenfolge plus ein ObjektGraphicsComplex
. Ich habe die Punkte aus dem Plot mit extrahiert points = dynamicalStream[[1]][[2]][[1]]
. Bei jemand anderem kann das anders sein. Die Line
Objekte aus diesem GraphicsComplex
Objekt wurden mit extrahiert (und ich entschuldige mich für die Art und Weise, wie ich das gemacht habe, es gibt wahrscheinlich bessere Methoden)
lines = dynamicalStream[[1]][[2]][[2]][[2]][[3]][[2 ;; Length[ dynamicalStream[[1]][[2]][[2]][[2]][[3]]]] ].
Ich würde sagen, dass dies wahrscheinlich nicht nützlich ist. Entweder Sie suchen sich eine allgemeinere Methode oder machen es wie ich und suchen manuell nach dem richtigen Teil der Liste, aus dem Sie extrahieren möchten.
Ich habe dann eine Liste erstellt, in der jedes Element selbst eine Liste von Punkten für jede Zeile ist. Dies wurde mit gemacht pointstable = Table[points[[#[[1]][[i]]]], {i, 1, Length[#[[1]]]}] & /@ lines
. Die innere Liste wurde erstellt, indem jedes Element im Objekt durchgegangen wurde Line
(dies ist eine Position eines Punkts in der points
Liste) und der richtige Punkt extrahiert wurde. So erstellen Sie eine Liste von Punkten, die den entsprechen . Dies wird dann über jedes Objekt in Line
abgebildet , sodass die endgültige Liste die beschriebene Form hat.Line
lines
Anschließend habe ich jede Liste in einer separaten Textdatei gespeichert:
Export["line" <> IntegerString[#2] <> ".txt", #,"Table"] &~MapIndexed~pointstable
wie im Link beschrieben.
Ich habe geplottet mit:
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\usetikzlibrary{decorations.markings}
\tikzset{->-/.style={decoration={
markings,
mark=at position #1 with {\arrow{>}}},postaction={decorate}}}
\tikzset{-<-/.style={decoration={
markings,
mark=at position #1 with {\arrow{<}}},postaction={decorate}}}
\begin{document}
\begin{tikzpicture}[scale=1.5]
\begin{axis}[axis lines=none]
\foreach \i in {1,2,3,4,...,107}{
\addplot[black,->-=0.5] table[]{line\i.txt};
}
\end{axis}
\end{tikzpicture}
\end{document}
Nachdem Sie sich den Link genau angesehen haben, wäre folgender einfacherer Weg möglich:
points = Cases[dynamicalStream, GraphicsComplex[data__] :> data, -3, 1][[1]]
lines = Cases[dynamicalStream, Line[data__] :> data, -3];
pointstable = Table[points[[#[[i]]]], {i, 1, Length[#]}] & /@ lines