matplotlib 慢速 3D 散点旋转
matplotlib Slow 3D scatter rotation
我正在使用 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()
它起作用了,所以它会打开一个 window,我可以在其中查看我的点数。
但是,如果我尝试用鼠标旋转绘图(单击并拖动它),它旋转得非常慢。
我认为 6500 点对于如此缓慢和滞后的旋转来说并不多,所以我想知道是否有任何预配置可以加快速度。
注意:我尝试使用 Matlab,我可以旋转更大的散点图而没有任何延迟,所以这不是计算机限制。
谁能运行这个代码,看看是否也遇到了慢速旋转?
编辑:使用系统监视器我可以看到在旋转点时,只使用了一个 CPU,所以 matplotlib 没有并行化这个过程。
我的电脑规格:
- 英特尔(R) 酷睿(TM) i5-3550 CPU @ 3.30GHz
- 显卡:Xeon E3-1200 v2/3rd Gen Core 处理器图形控制器
- 内存:10GB RAM
- 硬盘:三星固态硬盘 500 GB
运行宁Ubuntu16.10
(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 图表,可以轻松地通过网络查看 (!) 或保存为静态文件格式
- 它比 matplotlib 更清晰api(对于完整配置,
json
大概)
- 它与 pandas 紧密集成(您可以 use it as the backend)
- 它得到了很好的支持并且采用率正在增加
我正在使用 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()
它起作用了,所以它会打开一个 window,我可以在其中查看我的点数。
但是,如果我尝试用鼠标旋转绘图(单击并拖动它),它旋转得非常慢。
我认为 6500 点对于如此缓慢和滞后的旋转来说并不多,所以我想知道是否有任何预配置可以加快速度。
注意:我尝试使用 Matlab,我可以旋转更大的散点图而没有任何延迟,所以这不是计算机限制。
谁能运行这个代码,看看是否也遇到了慢速旋转?
编辑:使用系统监视器我可以看到在旋转点时,只使用了一个 CPU,所以 matplotlib 没有并行化这个过程。
我的电脑规格:
- 英特尔(R) 酷睿(TM) i5-3550 CPU @ 3.30GHz
- 显卡:Xeon E3-1200 v2/3rd Gen Core 处理器图形控制器
- 内存:10GB RAM
- 硬盘:三星固态硬盘 500 GB
运行宁Ubuntu16.10
(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 图表,可以轻松地通过网络查看 (!) 或保存为静态文件格式
- 它比 matplotlib 更清晰api(对于完整配置,
json
大概) - 它与 pandas 紧密集成(您可以 use it as the backend)
- 它得到了很好的支持并且采用率正在增加