欢迎光临
我们一直在努力

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/simple

    matplotlib渲染

    为了体现datashader的性能,这里先用我们熟悉的matplotlib做一个示例,绘制5000万数据点,

    在这里插入图片描述

    代码如下,最终耗时17.54秒。

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt

    # 数据准备
    N = 50_000_000
    df = pd.DataFrame({
    'x': np.random.randn(N),
    'y': np.random.randn(N)
    })

    start_mpl = time.time()

    plt.figure(figsize=(8, 6))
    plt.scatter(df['x'], df['y'], s=1, alpha=0.1, color='blue')
    plt.title("Matplotlib Scatter (10M Points)")
    plt.savefig("mpl_10m.png", dpi=100)
    plt.close()
    print(f"❌ Matplotlib 耗时: {time.time() start_mpl:.2f} 秒")

    性能对比

    datashader的绘图代码如下,其聚合计算和图像渲染加一起不到0.5秒。

    import datashader as ds
    import datashader.transfer_functions as tf
    from colorcet import fire
    import time

    canvas = ds.Canvas(plot_width=800, plot_height=600)

    start = time.time()
    agg = canvas.points(df, 'x', 'y')
    print(f"⚡ 聚合计算耗时: {time.time() start:.4f} 秒")
    # 聚合计算耗时: 0.2685 秒

    start = time.time()
    img = tf.shade(agg, cmap=fire, how='eq_hist')
    print(f"🎨 图像渲染耗时: {time.time() start:.4f} 秒")
    # 图像渲染耗时: 0.1049 秒
    img.to_pil().save("datashader_demo.png")

    代码中,canvas用于定义绘图画布,通过调用其中的points方法,可绘制散点图,这一步使用了聚合方案,速度极快;tf.shade为渲染操作,这一步根据图像中点的疏密程度上了伪彩色,绘制结果如下

    在这里插入图片描述

    赞(0)
    未经允许不得转载:171主机测评 » Python快速绘制千万级数据点:Datashader
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址