我有一个500000个样本的数组,即数据的形状是(500000, 3)
,其中前两列代表x坐标和y坐标,第三列是数据点@(X, Y)属于。
例如: - data= [ [20,10, 12.3320], [22, 13, 230.221],.....[..] ]
我尝试了以下方法。但这太耗时而且解释不好。
import matplotlib.pyplot as plt
colors = 10*['r.','g.','b.','c.','k.','y.','m.']
for i in range(len(labels)):
plt.scatter(data[i][0], data[i][1], colors[labels[i]],marker='.')
plt.show()
是否有其他方法如imshow()
或其他方法适用于上述代码,从而获得良好的解释?
答案 0 :(得分:1)
matlplotlib中的分散函数安静得很慢,我建议使用使用GPU绘制大量点的vispy:
使用可以使用pip或conda安装的vispy 0.4.0:
pip install vispy
这是代码(在我的计算机上以不到2秒的时间绘制):
import numpy as np
from vispy import scene, visuals, app
import matplotlib.pyplot as plt
data = np.random.random((500000,3))
canvas = scene.SceneCanvas(keys='interactive', show=True)
view = canvas.central_widget.add_view()
# Create the scatter plot
scatter = scene.visuals.Markers()
scatter.set_data(data[:,:2], face_color=plt.cm.jet(data[:,2]))
view.add(scatter)
view.camera = scene.PanZoomCamera(aspect=1)
view.camera.set_range()
app.run()
有一个很好的vispy文档,您可以使用 face_color,edge_color,size,edge_width,symbol ......等参数在set_data
函数中自定义您的绘图。
祝你的数据可视化好运;)