python - datashader 和其他绘图库之间的区别

标签 python matplotlib plotly datashader

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

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

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

此外,datashader 不会对浏览器造成任何负载,因为在后端 datashader 会根据我的数据帧创建一个图形,并仅将图像发送到浏览器,这就是它速度快的原因?

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

最佳答案

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

关于python - datashader 和其他绘图库之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52584339/

相关文章:

Python:在 opencv/python 中运行 estimateRigidTransform; 8uC1 或 8uC3 错误

python - Ipython %matplotlib 给出 "ImportError: No module named moves"尽管通过 pip 安装了移动

python - 在 Python 中使用 Matplotlib 制作 4 维散点图

javascript - 长刻度标签在 plotly.js 图表中被 chop

python - 将 xls 转换为 csv 并创建/更新 InMemoryUploadedFile Django

python - 为什么Python 3.10中关键字 `match`可以作为变量名或函数名?

python - pylab.scatter 创建带有奇怪白线的颜色条

R plot_ly() : adding multiple vertical lines to a plot based on time data

javascript - plotly.js 如何在悬停时更改 z 数据以在色标上显示 % 和 %

python - 在 groupby 聚合之后指定列顺序