
Tengo el campo vectorial ${x^2+2*x*y,y^2+2*x*y}
y me gustaría trazar 'corrientes'. quiver
from pgfplots
produce flechas (que normalizo) pero creo que las secuencias harían las cosas más fáciles de entender. Aquí hay uno StreamPlot
que crea Mathematica.
Me gustaría poder hacer algo como esto para pgfplots
poder mantener la coherencia del estilo. Quizás si pudiera extraer los puntos que producen las curvas, entonces podría trazarse con pgfplots
.
Respuesta1
Usé esto:https://mathematica.stackexchange.com/questions/19859/plot-extract-data-to-a-fileinicialmente. El primer elemento de la trama dynamicalStream
era una cadena vacía más un objeto.GraphicsComplex
. Extraje los puntos de la trama con points = dynamicalStream[[1]][[2]][[1]]
. Puede que sea diferente para otra persona. Los Line
objetos de este GraphicsComplex
objeto fueron extraídos (y pido disculpas por la forma en que lo hice, probablemente haya mejores métodos)
lines = dynamicalStream[[1]][[2]][[2]][[2]][[3]][[2 ;; Length[ dynamicalStream[[1]][[2]][[2]][[2]][[3]]]] ].
Yo diría que es poco probable que esto sea útil, así que o buscas un método más general o haces lo que yo hice, que es encontrar manualmente la parte correcta de la lista para extraerla.
Luego creé una lista donde cada elemento es en sí mismo una lista de puntos para cada línea. Esto se hizo con pointstable = Table[points[[#[[1]][[i]]]], {i, 1, Length[#[[1]]]}] & /@ lines
. La lista interna se creó revisando cada elemento del Line
objeto (esta es la posición de un punto en la points
lista) y extrayendo el punto correcto. De esta forma se hace una lista de puntos correspondientes al Line
. Luego, esto se asigna a cada Line
objeto lines
para que la lista final tenga la forma descrita.
Luego guardé cada lista en un archivo de texto separado:
Export["line" <> IntegerString[#2] <> ".txt", #,"Table"] &~MapIndexed~pointstable
como se describe en el enlace.
Tracé con:
\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}
Después de mirar ese enlace correctamente, una forma más sencilla de hacerlo sería:
points = Cases[dynamicalStream, GraphicsComplex[data__] :> data, -3, 1][[1]]
lines = Cases[dynamicalStream, Line[data__] :> data, -3];
pointstable = Table[points[[#[[i]]]], {i, 1, Length[#]}] & /@ lines