2016-05-16 104 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使用它。