2016-08-15 1 views
3

Leistungsmäßig funktioniert das folgende Code-Snippet perfekt für mich beim Plotten in .10,000+ Point 3D Scatter Plots in Python (mit Quick Rendering)

import numpy as np 
from mayavi import mlab 

n = 5000 
x = np.random.rand(n) 
y = np.random.rand(n) 
z = np.random.rand(n) 
s = np.sin(x)**2 + np.cos(y) 

mlab.points3d(x, y, z, s, colormap="RdYlBu", scale_factor=0.02, scale_mode='none') 

Aber mayavi beginnt einmal zu ersticken. Die analoge 3D-Plot-Routine in matplotlib, (Axes3D.scatter), kämpft in ähnlicher Weise mit Datensätzen dieser Größe (warum ich zuerst nach gesucht habe).

Erstens, gibt es etwas in mayavi (trivial oder nontrivial), die ich vermisse, die mehr als 10.000 Punkte Streudiagramme machen würde viel einfacher zu rendern?

Zweitens, wenn die obige Antwort nein ist, welche anderen Optionen (entweder mayavi oder ein anderes Python-Paket) muss ich Datensätze dieser Größenordnung plotten?

Ich habe ParaView einfach getaggt, um hinzuzufügen, dass das Rendern meiner Daten in ParaView reibungslos verläuft, was mich zu der Annahme verleitet, dass ich nicht versuche, irgendetwas Unzumutbares zu tun.

Update:

den Modus als 2D-Glyphe nach oben geht einen langen Weg zur Beschleunigung Dinge angeben. Z.B.

mlab.points3d(x, y, z, s, colormap="RdYlBu", scale_factor=0.02, 
       scale_mode='none', mode='2dcross') 

leicht unterstützen bis zu 100.000 Punkte

enter image description here

Es ist immer noch schön wäre, wenn jemand ein paar Informationen über hinzufügen könnte, wie die Wiedergabe von 3D-Glyphen zu beschleunigen.

Antwort

2

PyQtGraph ist ein viel performanter Plot-Paket, obwohl nicht so "schön" wie Matplotlib oder Mayavi. Es ist für Zahlenverarbeitung ausgelegt und sollte daher Punkte in der Größenordnung von Zehntausend leicht wiedergeben.

Wie für und matplotlib: Ich denke mit dieser Anzahl von Punkten haben Sie erreicht, was mit diesen Paketen möglich ist.

Edit: VisPy scheint der Nachfolger von PyQtGraph und einige andere Visualisierungspakete zu sein. Könnte ein bisschen übertrieben sein, aber es kann leicht ein paar hunderttausend Punkte anzeigen, indem Sie die Berechnungen auf die GPU verlagern.

+0

Danke für die Wiederbelebung dieser Frage! Obwohl VisPy ein sehr leistungsfähiges Visualisierungspaket zu sein scheint, ist die API auf den ersten Blick komplizierter als ich es von Python-Paketen gewohnt bin und sie scheint besonders auf dynamisches Plotten/Rendern ausgerichtet zu sein. Wie auch immer, ich werde sehen, ob es in den kommenden Tagen meinen Absichten entspricht, danke! – lanery