Slow ListPlot mit PlotMarkers

8

Ich mache das:

%Vor%

und führen Sie dann

aus %Vor%

und schließlich zeichne ich die Punkte wie folgt auf (hier ist der eigentliche Punkt der Frage):

%Vor%

Die Berechnung aller Punkte dauert ungefähr 2,6 Sekunden auf meinem Rechner, aber die Handlung dauert ungefähr 25 Sekunden. Wenn ich es andererseits so zeichne,

%Vor%

dann ist es fast sofort, wie es sollte (es ist nur 5256 Punkte). Es scheint also, dass PlotMarkers die Dinge immens verlangsamt.

Könnte jemand a) erklären warum (so viel ich vage verstehe, in Analogie zu dem, was mit Sort passiert, wenn Sie es benutzerdefinierte Bestellfunktion geben) und, noch wichtiger, b) erklären, wie man diese Verlangsamung vermeidet? Ich versuche, Plots mit ein paar mehr Punkten als das zu erstellen, also sind sie wirklich langsam; Außerdem erstelle ich viele von ihnen (eigentlich ein Film).

Eine Lösung wäre, nicht alle zu plotten, aber wenn ich die Parameter verändere, wird es untrivial, herauszufinden, was ich mit einschließen sollte und was nicht (das würde natürlich funktionieren, wenn ich nur diesen einen Frame benötige). Also möchte ich die Plot-Erstellung beschleunigen, ohne Punkte zu entfernen.

BEARBEITEN: Beantwortet nach Hinweisen von Sjoerd:

%Vor%

erzeugt augenblicklich das Richtige. Dies ersetzt einfach die Points in der Graphics Struktur durch kleinere Punkte von Hand.

Jetzt kann man die Obergrenze in der Tabelle in fracs = Table[p/q, {q, 2, 30}, {p, 2, q}] // Flatten // DeleteDuplicates auf 80 oder so erhöhen, um viele weitere Punkte zu erhalten (dieses Ding ist der Hofstadter-Schmetterling, und es ist ein Fraktal):

    
acl 26.06.2011, 20:06
quelle

3 Antworten

9

PlotMarkers ist für Datendiagramme gedacht, die relativ wenige Punkte enthalten. Es ist sehr nützlich in Plots, in denen Sie die Marker verwenden, um verschiedene Bedingungen zu identifizieren. Jeder einzelne Marker ist ein Inset wie folgt:

%Vor%

Sie können sich vorstellen, dass dies einige Zeit und Erinnerungen in Anspruch nimmt.

Ich habe auch gefunden, was ein Bug zu sein scheint. Das Diagramm mit PlotMarkers ist als GraphicsComplex[pointlist,graphicsinstructions] strukturiert. Diese Punktliste scheint die Punkte in der Handlung zweimal zu enthalten!

%Vor%     
Sjoerd C. de Vries 26.06.2011, 20:22
quelle
6

Persönlich bevorzuge ich Graphics bis ListPlot , besonders wenn die Anzahl der Punkte groß ist.

%Vor%

gibt zum Beispiel:

%Vor%

102969

    
tomd 26.06.2011 23:04
quelle
3

Ich glaube, dass die Lösung, die Sie an Ihre Frage angehängt haben, vereinfacht werden kann:

%Vor%

Ich habe für beide vorherigen Antworten gestimmt, aber ich stimme TomD zur direkten Verwendung von Graphics zu.

    
Mr.Wizard 24.08.2011 03:59
quelle

Tags und Links