文章目录
-
- Datashader简介
- matplotlib渲染
- 性能对比
Datashader简介
Datashader直译过来就是像素着色器,这也是它的工作逻辑,即不画点、画像素。传统的绘图逻辑是,没来一个数据对,就在画布上操作一下,知道画完所有点;Datashader则通过聚合与栅格化技术,将数亿甚至数十亿个数据点实时转换为一张高分辨率的图像,其具体工作流程为
安装如下,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为渲染操作,这一步根据图像中点的疏密程度上了伪彩色,绘制结果如下





