
Então eu tenho o campo vetorial ${x^2+2*x*y,y^2+2*x*y}
e gostaria de plotar 'fluxos'. quiver
from pgfplots
produz setas (que eu normalizo), mas acho que os fluxos tornariam as coisas mais fáceis de entender. Aqui está um StreamPlot
que o mathematica cria.
Eu gostaria de poder fazer algo assim para pgfplots
poder manter a consistência do estilo. Talvez se eu pudesse extrair os pontos que produzem as curvas, isso poderia ser plotado com pgfplots
.
Responder1
Eu usei isso:https://mathematica.stackexchange.com/questions/19859/plot-extract-data-to-a-fileinicialmente. O primeiro elemento no gráfico dynamicalStream
foi uma string vazia mais um objetoGraphicsComplex
. Extraí os pontos do gráfico com points = dynamicalStream[[1]][[2]][[1]]
. Pode ser diferente para outra pessoa. Os Line
objetos deste GraphicsComplex
objeto foram extraídos com (e peço desculpas pela maneira como fiz isso, provavelmente existem métodos melhores)
lines = dynamicalStream[[1]][[2]][[2]][[2]][[3]][[2 ;; Length[ dynamicalStream[[1]][[2]][[2]][[2]][[3]]]] ].
Eu diria que é improvável que isso seja útil, então você encontra um método mais geral ou faz o que eu fiz, que é encontrar manualmente a parte correta da lista para extrair.
Criei então uma lista onde cada elemento é uma lista de pontos para cada linha. Isso foi feito com pointstable = Table[points[[#[[1]][[i]]]], {i, 1, Length[#[[1]]]}] & /@ lines
. A lista interna foi criada percorrendo cada elemento do Line
objeto (esta é a posição de um ponto na points
lista) e extraindo o ponto correto. Assim você faz uma lista de pontos correspondentes ao Line
. Isso é então mapeado sobre cada Line
objeto lines
para que a lista final tenha o formato descrito.
Em seguida, salvei cada lista em um arquivo de texto separado:
Export["line" <> IntegerString[#2] <> ".txt", #,"Table"] &~MapIndexed~pointstable
conforme descrito no link.
Eu planejei com:
\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}
Depois de analisar esse link corretamente, uma maneira mais fácil de fazer isso seria:
points = Cases[dynamicalStream, GraphicsComplex[data__] :> data, -3, 1][[1]]
lines = Cases[dynamicalStream, Line[data__] :> data, -3];
pointstable = Table[points[[#[[i]]]], {i, 1, Length[#]}] & /@ lines