2

我想了解Datashader与其他图形库之间的明显区别,例如plotly/matplotlib等。

  1. 我知道为了绘制数百万/数十亿个数据点,我们需要数据着色器,因为其他绘图库会挂起浏览器。

  2. 但是究竟是什么原因使数据着色器快速并且不挂起浏览器以及绘图是如何完成的并且不会给浏览器带来任何负载????

此外,datashader 不会给浏览器带来任何负载,因为在后端,datashader 会根据我的数据框创建一个图形,并且只将图像发送到浏览器,这就是为什么它很快?

请解释我无法清楚地理解进出。

4

2 回答 2

3

首先考虑 Datashader 可能会有所帮助,而不是与 Matplotlib 或 Plotly 进行比较,而是与numpy.histogram2d. 默认情况下,Datashader 会将一长串 (x,y) 点转换为 2D 直方图,就像 histogram2d 一样。这样做只需要为每个新点简单地增加一个网格单元,这很容易通过 Numba 加速到机器代码速度,并且与 Dask 并行化是微不足道的。然后,无论您的数据集有多大,生成的数组最多就是您的显示屏的大小。因此,在添加轴、标签等的单独程序中进行处理是很便宜的,而且它永远不会让你的浏览器崩溃。

相比之下,像 Plotly 这样的绘图程序需要将每个数据点转换为 JSON 或其他序列化表示,将其传递给浏览器中的 JavaScript,让 JavaScript 将形状绘制到图形缓冲区中,并使每个这样的形状支持悬停和其他互动功能。这些交互功能很棒,但这意味着 Plotly 在每个数据点上所做的工作比 Datashader 多得多,并且要求浏览器可以保存所有这些数据点。Datashader 需要对完整数据进行的唯一计算是线性缩放每个点的 x 和 y 位置以适应网格,然后增加网格值,这比 Plotly 所做的要容易得多。

与 Matplotlib 的比较稍微复杂一些,因为有了 Agg 后端,Matplotlib 还在显示之前预渲染到固定大小的图形缓冲区(有点像 Datashader)。但是 Matplotlib 是在 Numba 和 Dask 之前编写的(使得加速变得更加困难),它仍然必须为每个点绘制形状(不仅仅是简单的增量),它不能完全并行化操作(因为后面的点会覆盖前面的点在 Matplotlib 中),它提供了 Datashader 中没有的抗锯齿和其他不错的功能。因此,Matplotlib 比 Datashader 做了更多的工作。

但是,如果您真正想做的是查看数十亿数据点的忠实 2D 分布,Datashader 是您的最佳选择,因为这就是它所做的一切。:-)

于 2018-10-03T15:24:49.017 回答
1

数据着色器文档中,

datashader 旨在将数据集“栅格化”或“聚合”成可以被视为图像的常规网格,从而可以简单快速地查看数据的属性和模式。Datashader 可以在 16GB 笔记本电脑上在一秒钟左右绘制十亿个点,并且可以轻松扩展到核外或分布式处理,以处理更大的数据集。

这些库中没有任何技巧 - 渲染大量点需要很长时间。datashader 所做的就是将可视化的负担从渲染转移到计算上。在数据着色器中绘制指令之前,您必须创建一个画布是有充分理由的。数据着色器管道的第一步是对数据集进行栅格化,换句话说,它会近似每条数据的位置,然后使用聚合函数来确定每个像素的强度或颜色。这允许数据着色器绘制大量的点;甚至超过记忆中的点数。

另一方面,Matplotlib 会渲染您指示它绘制的每一个点,这使得绘制大型数据集非常耗时甚至不可能。

于 2018-10-01T04:38:10.103 回答