【问题标题】:"Fast" interactive plot of a 2d numpy array in pythonpython中二维numpy数组的“快速”交互式绘图
【发布时间】:2016-05-16 16:47:35
【问题描述】:

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

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

【问题讨论】:

  • 不加评论的反对票不是很有用。
  • 你陈述你不想要的,而不是你真正想要的。
  • @Han-KwangNienhuys 我想我的第一段不清楚。我有一个 2d 数组,我想在 3d 中可视化它,z 轴代表数组在每个点的值。我希望能够使用鼠标拖动来旋转它。

标签: python matplotlib plot mayavi


【解决方案1】:

这是一个 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 中使用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 2018-07-27
    • 1970-01-01
    • 2020-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多