使用matplotlib绘制具有数千个点及其标签(组)的数据

时间:2017-02-01 22:38:54

标签: python numpy matplotlib scipy

我有一个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()或其他方法适用于上述代码,从而获得良好的解释?

1 个答案:

答案 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函数中自定义您的绘图。

祝你的数据可视化好运;)