首页 > 解决方案 > 数据着色器和其他绘图库之间的区别

问题描述

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

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

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

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

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

标签: pythonmatplotlibplotlydatashader

解决方案


首先考虑 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 是您的最佳选择,因为这就是它所做的一切。:-)


推荐阅读