2016-05-16 108 views
-1

我需要在python中可視化2d numpy數組。不是等值線圖,不是曲線圖。繪製3d數組中每個(x,y)元素的z軸上的點。我的數據是一個1024 x 1024的數組,但我想如果必須的話,我可以將它抽取出來。我需要能夠用鼠標拖動來繪製劇情,從不同的角度來看它。python中的2d numpy數組的「快速」交互式繪圖

Matplotlib無法做到這一點,即使是100 x 100陣列。它太慢了。拖動後,100 x 100陣列需要兩或三秒才能重新繪製。 1024 x 1024是不可能的。

來自Mayavi的mlab似乎有這種能力,但最簡單的試驗在我的系統上崩潰了wx錯誤。就我所知,提供快速交互式旋轉的軟件包(例如VTK)專注於渲染複雜的3D形狀,並且不提供用於繪製數據的簡單API。

你能提出建議嗎?

我的當前設置:
OS X 10.11.4
蟒蛇1.7.11
numpy的1.11.0
matplotlib 1.5.1
Mayavi的4.4.0
WX 3.0.0.0

+0

如果沒有評論,反對票不是很有用。 – garyp

+0

你說出你不想要的,但不是你實際上想要的。 –

+0

// @ Han-KwangNienhuys我猜我的第一段不清楚。我有一個2d數組,我想用3d形象化它,其中z軸表示每個點處數組的值。我希望能夠使用鼠標拖動來旋轉它。 – garyp

回答

0

這是20x20抽取的xyz圖,這是我的筆記本電腦可以舒適地工作的最高點。除此之外的更多點無論如何都沒有多大意義,因爲您再也無法將各個點分開。

from mpl_toolkits.mplot3d.axes3d import Axes3D 
import matplotlib.pyplot as plt 
import numpy as np 

fig = plt.figure() 
X = np.linspace(-3,3,1024) 
Y = np.linspace(-3,3,1024) 
X, Y = np.meshgrid(X, Y) 
Z = np.exp(-(X**2+Y**2)) 
ax = fig.add_subplot(1, 1, 1, projection='3d') 
ax.plot_wireframe(X, Y, Z, rstride=20, cstride=20) 

plt.show(block=False) 
raw_input('Press ENTER') 

你可以考慮通過Gnuplot繪圖。它將比matplotlib處理交互式旋轉要快得多。例如:

set isosamp 50 
set xrange [-3:3] 
set yrange [-3:3] 
splot exp(-x**2-y**2) 

有一個python模塊Gnuplot.py應該允許你直接從python使用它。