ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Python快速绘制千万级数据点:Datashader

Python快速绘制千万级数据点:Datashader 文章目录Datashader简介matplotlib渲染性能对比Datashader简介Datashader直译过来就是像素着色器这也是它的工作逻辑即不画点、画像素。传统的绘图逻辑是没来一个数据对就在画布上操作一下知道画完所有点Datashader则通过聚合与栅格化技术将数亿甚至数十亿个数据点实时转换为一张高分辨率的图像其具体工作流程为投影将数据坐标映射到屏幕像素网格上。聚合统计每个像素内包含的数据点数量或数值总和例如计算均值、最大值。这一步由高度优化的 C/Numba 代码在 CPU 上完成速度极快。着色根据聚合结果应用颜色映射Colormap生成最终的 PNG 或 WebP 图像。安装如下pip就OK。pip install datashader-i https://pypi.tuna.tsinghua.edu.cn/simplematplotlib渲染为了体现datashader的性能这里先用我们熟悉的matplotlib做一个示例绘制5000万数据点代码如下最终耗时17.54秒。importnumpyasnpimportpandasaspdimportmatplotlib.pyplotasplt# 数据准备N50_000_000dfpd.DataFrame({x:np.random.randn(N),y:np.random.randn(N)})start_mpltime.time()plt.figure(figsize(8,6))plt.scatter(df[x],df[y],s1,alpha0.1,colorblue)plt.title(Matplotlib Scatter (10M Points))plt.savefig(mpl_10m.png,dpi100)plt.close()print(f❌ Matplotlib 耗时:{time.time()-start_mpl:.2f}秒)性能对比datashader的绘图代码如下其聚合计算和图像渲染加一起不到0.5秒。importdatashaderasdsimportdatashader.transfer_functionsastffromcolorcetimportfireimporttime canvasds.Canvas(plot_width800,plot_height600)starttime.time()aggcanvas.points(df,x,y)print(f⚡ 聚合计算耗时:{time.time()-start:.4f}秒)# 聚合计算耗时: 0.2685 秒starttime.time()imgtf.shade(agg,cmapfire,howeq_hist)print(f 图像渲染耗时:{time.time()-start:.4f}秒)# 图像渲染耗时: 0.1049 秒img.to_pil().save(datashader_demo.png)代码中canvas用于定义绘图画布通过调用其中的points方法可绘制散点图这一步使用了聚合方案速度极快tf.shade为渲染操作这一步根据图像中点的疏密程度上了伪彩色绘制结果如下
返回列表