【问题标题】:matplotlib Slow 3D scatter rotationmatplotlib 慢速 3D 散点旋转
【发布时间】:2017-08-28 11:42:56
【问题描述】:

我正在使用 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 没有并行化进程。

我的电脑规格:

  • Intel(R) Core(TM) i5-3550 CPU @ 3.30GHz
  • 显卡:Xeon E3-1200 v2/3rd Gen Core 处理器图形控制器
  • 内存:10GB RAM
  • 硬盘:三星 SSD 500 GB

运行 Ubuntu 16.10

【问题讨论】:

  • 恐怕 matplotlib 在设计时没有考虑到速度,在您的情况下性能缓慢并不是您本地安装的特定怪癖 - 这是 mplot3d 的编写方式。如果你想在 python 中使用快速 3d 散点图,你可以查看plotly.py lib - 它非常快,尽管它的 python 功能有些限制。
  • 回应@VlasSokolov 所说的——matplotlib 不是为快速交互式绘图而设计的,尤其是在 3D 中(这不是真正成熟的 3D 功能,更多的是为了方便)。您还可以查看 mayavi 进行 3D 绘图。另外,作为 Python 提示 - 我建议反对 import pylab as pltplt 通常用于matplotlib.pyplot not pylab。您可能发现的任何这样做的例子都是旧的。此外,完全不建议在脚本中使用 pylab 作为好习惯 - 分别使用 matplotlib 和 numpy。

标签: python matplotlib scatter-plot


【解决方案1】:

(2021 年修订)

Matplotlib 的设计初衷并不是交互式的。 Plotly(在其他几个中)是一个功能相当完整的绘图包,并为scatter3D 使用 webGL 后端,它将在您的浏览器中呈现(并且速度非常快)。详细了解为什么您可能希望将其视为底部的首选替代品:

# pip install plotly
import numpy as np
import plotly.graph_objects as go

my_data = np.random.rand(6500,3)  # toy 3D points
marker_data = go.Scatter3d(
    x=my_data[:,0], 
    y=my_data[:,1], 
    z=my_data[:,2], 
    marker=go.scatter3d.Marker(size=3), 
    opacity=0.8, 
    mode='markers'
)
fig=go.Figure(data=marker_data)
fig.show()

我使用 plotly 作为 matplotlib 的替代品,因为:

  • 覆盖范围广(条形图、散点图、线形图、柱形图等)
  • 高度可配置的直观交互式组件
  • 可移植性:它可以生成 html 图,可以通过网络轻松查看(!)或保存为静态文件格式
  • 它的 api 比 matplotlib 更清晰(完整配置,jsonish)
  • 与pandas强集成(可以use it as the backend
  • 它得到了很好的支持,并且采用率正在增加

【讨论】:

  • 这很好!不过,我必须大幅减小标记的大小才能得到像你的情节一样的东西。
猜你喜欢
  • 1970-01-01
  • 2021-10-21
  • 1970-01-01
  • 1970-01-01
  • 2015-10-18
  • 2012-05-09
  • 1970-01-01
  • 2022-01-27
  • 1970-01-01
相关资源
最近更新 更多