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