Python datashader与其他绘图库之间的差异

Python datashader与其他绘图库之间的差异,python,matplotlib,plotly,datashader,Python,Matplotlib,Plotly,Datashader,我想了解Datashader与其他图形库(如plotly/matplotlib等)之间的明显区别 我知道,为了绘制数百万/数十亿个数据点,我们需要datashader,因为其他绘图库会挂断浏览器 但是,到底是什么原因使datashader变得更快速,并且不会挂断浏览器,以及如何准确地进行打印,而不会给浏览器带来任何负载 此外,datashader不会在浏览器上加载任何负载,因为在后端,datashader将根据我的数据帧创建一个图形,并仅将图像发送到浏览器,这就是它的速度快的原因 请解释我无法清

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

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

  • 但是,到底是什么原因使datashader变得更快速,并且不会挂断浏览器,以及如何准确地进行打印,而不会给浏览器带来任何负载

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

    请解释我无法清楚地理解输入和输出。

    datashader旨在将数据集“光栅化”或“聚合”到可以作为图像查看的规则网格中,从而使查看数据的属性和模式变得简单而快速。Datashader可以在16GB笔记本电脑上每秒绘制10亿个点,并且可以轻松扩展到更大数据集的核心外处理或分布式处理

    这些库中没有任何技巧-渲染大量点需要很长时间。datashader所做的是将可视化的负担从渲染转移到计算。在datashader中打印指令之前,有一个很好的理由需要创建画布。datashader管道中的第一步是光栅化数据集,换句话说,它近似每个数据段的位置,然后使用聚合函数确定每个像素的强度或颜色。这使得datashader可以绘制大量的点;甚至比记忆中能保存的点数还要多


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

    首先考虑Datashader时,不要将其与Matplotlib或Plotly进行比较,而应将其与
    numpy.historogram2d
    进行比较。默认情况下,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就是一个不错的选择,因为这就是它真正要做的一切。:-)