2017-04-03 5 views
4

Ich benutze Matplotlib, um eine 3D-Matrix von Punkten zu streuen. Ich verwende den folgenden Code ein:matplotlib Slow 3D Scatter Rotation

import pylab as plt 
from mpl_toolkits.mplot3d import Axes3D 
import numpy as np 

my_data = np.random.rand(6500,3) # toy 3D points 

fig = plt.figure() 
ax = Axes3D(plt.gcf()) 
ax.scatter(my_data[:,0],my_data[:,1],my_data[:,2]) 
plt.show() 

Es funktioniert, so öffnet sich ein Fenster, in dem ich meine Punkte sehen.

Wenn ich jedoch versuche, das Diagramm mit der Maus zu drehen (klicken und ziehen), dreht es sich wirklich langsam.

Ich denke, 6500 Punkte sind nicht viel für solch eine langsame und laggy Rotation, also frage ich mich, ob es eine Vorkonfiguration geben muss, um es zu beschleunigen.

Hinweis: Ich habe versucht, Matlab zu verwenden, und ich kann ein viel größeres Streudiagramm ohne Verzögerung drehen, also ist es keine Computerbeschränkung.

Kann jemand diesen Code ausführen und sehen, ob auch die langsame Rotation erlebt?

BEARBEITEN: Mit dem Systemmonitor kann ich sehen, dass beim Drehen der Punkte nur eine CPU verwendet wird, so dass Matplotlib den Prozess nicht parallelisiert.

Mein Computer Spezifikationen:

  • Intel (R) Core (TM) i5-3550 CPU @ 3.30GHz
  • Grafikkarte: Xeon E3-1200 v2/3. Gen-Core-Prozessor Grafik-Controller
  • Speicher: 10 GB RAM
  • HDD: Samsung SSD 500 GB

Ubuntu 16.10

+0

Ich fürchte, dass Matplotlib wurde nicht mit Geschwindigkeit im Hinterkopf entwickelt, und langsame Leistung in Ihrem Fall ist keine besondere Eigenart Ihrer lokalen Installation - es ist die Art, wie mplot3d geschrieben wurde. Wenn Sie schnelle 3D-Streudiagramme mit Python verwenden möchten, können Sie 'plotly.py' lib ausprobieren - es ist sehr schnell, obwohl seine Python-Fähigkeiten etwas einschränkend sind. –

+2

Echo, was @VlasSokolov sagt - Matplotlib ist nicht für schnelle interaktive Plotten, vor allem in 3D (das ist keine echte vollwertige 3D-Fähigkeit, mehr nur für die Bequemlichkeit) konzipiert. Sie können auch in Mayavi für 3D-Plotting suchen. Auch als Python-Tipp würde ich gegen 'import pylab as plt' empfehlen. 'plt' wird normalerweise für' matplotlib.pyplot' * nicht * 'pylab' verwendet. Alle Beispiele, die Sie vielleicht gefunden haben, sind alt. Außerdem ist die Verwendung von pylab in einem Skript überhaupt nicht empfehlenswert - verwenden Sie matplotlib und numpy separat. – Ajean

+0

Siehe https://stackoverflow.com/questions/8955869/why-is-plotting-with-matplotlib-so-slow – thomaskeefe

Antwort

1

Es gibt kaum eine einzigartige Lösung für Ihr Problem, daher werde ich Vorschläge zur Verbesserung der Leistung anbieten.

1) Die erste und einfachste Sache zu versuchen: Verwenden Sie ein anderes Backend, kann in der Regel mit ~/.matplotlib/matplotlibre eingestellt werden. Einige Backends geben schreckliche Leistung. Ich habe auf meinem Computer gefunden, dass zu den besten gehört, aber Ihr Code-Beispiel immer noch mit ein paar Frames/Sek.

2) andere Plotten Pakete können Ihnen viel eine bessere Leistung, und es gibt viele: GTK, die GTK basiert mayavi und plotly sind ein paar zu versuchen. Diese sind möglicherweise nicht trivial zu installieren. Bevor Sie das tun, können Sie eine ungefähre Vorstellung davon bekommen, was Ihre Hardware mit den three.js Beispielen here im Browser darstellen kann. Obwohl dies ein Vergleich von "Äpfel zu Orangen" ist, legt er eine gewisse Basis für die Leistung fest, die Sie von einem gut optimierten Paket erwarten können. Persönlich habe ich mayavi in der Vergangenheit und fand die Leistung viel besser als matplotlib für 3D-Scatter-Plotten, obwohl die Python-Bindungen sind etwas in Frage bewegen vorwärts denke ich.

Ein letztes Wort der Vorsicht: diese Projekte scheinen aufzugehen und ein wenig auszufallen; Ich versuche mein Geld auf dasjenige mit der größten Gemeinschaft und konsequentesten Entwicklung zu legen, aber es scheint keinen Spitzenreiter zu geben (außer matplotlib).