python

时间:2016-05-16 16:47:35

标签: python matplotlib plot mayavi

我需要在python中可视化一个2d numpy数组。不是等高线图,不是曲面图。在3d数组中的每个(x,y)元素的z轴上绘制一个点。我的数据是1024 x 1024阵列,但我想如果必须的话,我可以对其进行抽取。我需要能够用鼠标拖动旋转绘图,以便从不同的角度看它。

即使对于100 x 100阵列,Matplotlib也无法做到这一点。这太慢了。拖动后,100 x 100阵列需要两到三秒才能重绘。 1024 x 1024是不可能的。

来自Mayavi的mlab似乎有这种能力,但最简单的试验在我的系统崩溃时出现了wx错误。据我所知,提供快速交互式旋转的软件包(例如VTK)专注于渲染复杂的3d形状,并且不提供用于绘制数据的简单API。

你能建议选择吗?

我目前的设置:
OS X 10.11.4
python 1.7.11
numpy 1.11.0
matplotlib 1.5.1
mayavi 4.4.0
wx 3.0.0.0

1 个答案:

答案 0 :(得分: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中使用它。