2017-04-03 128 views
4

我正在使用matplotlib散點圖3D矩陣的點。 我使用下面的代碼:matplotlib緩慢的3D散射旋轉

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() 

它的工作原理,所以它會打開一個窗口,在那裏我可以看到我的觀點。

但是,如果我嘗試用鼠標旋轉繪圖(單擊並拖動它),它會非常慢地旋轉。

我認爲6500分對於如此緩慢和緩慢的旋轉並不是很多,所以我想知道是否有任何預先配置來加速它。

注:我試圖使用Matlab,我可以旋轉一個更大的散點圖沒有任何滯後,所以它不是一個計算機的限制。

有人可以運行此代碼,看看是否也經歷慢速旋轉?

編輯:使用系統監視器我可以看到,旋轉點時,只有一個CPU被使用,所以matplotlib不是並行化的過程。

我的電腦規格:

  • 英特爾(R)核心(TM)i5-3550 CPU @ 3.30GHz
  • 圖形卡:至強E3-1200 V2 /第三代核心處理器圖形控制器
  • 內存:10GB RAM
  • 硬盤:三星SSD 500 GB

運行Ubuntu 16.10

+0

我擔心matplotlib的設計不是考慮到速度問題,在你的情況下性能低下並不是你本地安裝的特定問題 - 這就是mplot3d的編寫方式。如果你想使用Python的快速三維散點圖,你可以檢查'plotly.py'庫 - 它非常快,雖然它的python功能有些限制。 –

+2

回聲什麼@VlasSokolov說 - matplotlib不是設計用於快速交互式繪圖,特別是在3D(這不是一個真正的全面的3D功能,更多隻是爲了方便)。你也可以看看mayavi進行3D繪圖。另外,作爲一個Python提示 - 我會建議不要將'import pylab as plt'。 'plt'通常用於'matplotlib.pyplot' * not *'pylab'。你可能發現的任何例子都是舊的。此外,不推薦在腳本中使用pylab作爲良好實踐 - 分別使用matplotlib和numpy。 – Ajean

+0

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

回答

1

您的問題幾乎沒有獨特的解決方案,因此我會提供可以提高性能的建議。

1)第一個也是最簡單的嘗試:使用不同的後端,通常可以用〜/ .matplotlib/matplotlibrc來設置。一些後端給予糟糕的表現。我在我的機器上發現pyqt5是最好的之一,但仍以幾幀/秒的速度呈現您的代碼示例。

2)其它繪圖程序包可以給你更好的性能,而且有很多:GTK,基於mayaviplotly的GTK是一些嘗試。這些可能安裝或不安裝。在你做之前,你可以粗略地瞭解你的硬件能夠通過瀏覽器中的three.js示例here來渲染。雖然這是一個「蘋果和橘子」的比較,它設置的你可能會從一個很好的優化包的期望性能的一些基線。就個人而言,我已經在過去使用mayavi,發現性能更好地爲3D繪圖散射比matplotlib,雖然Python綁定是有點問題向前推進,我認爲。

一個警告的最後一個字:這些項目似乎彈起,彼得出一點;我儘量把我的錢放在一個與最大的社區和最穩定的發展,但似乎沒有要(比matplotlib等)的先行者。