datashader与其他绘图库的区别

2024-05-23 22:46:49 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

  2. 但是究竟是什么原因使数据阴影变得更快而不会挂断浏览器?绘图是如何完成的而不会给浏览器带来任何负载????

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

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


Tags: 数据图形绘图dataframematplotlib绘制浏览器原因
2条回答

datashader docs开始

datashader is designed to "rasterize" or "aggregate" datasets into regular grids that can be viewed as images, making it simple and quick to see the properties and patterns of your data. Datashader can plot a billion points in a second or so on a 16GB laptop, and scales up easily to out-of-core or distributed processing for even larger datasets.

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

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

首先不要将Datashader与Matplotlib或Plotly进行比较,而是将其与numpy.histogram2d进行比较,这可能会有帮助。默认情况下,Datashader会将一长串(x,y)点转换成二维直方图,就像histogram2d一样。这样做只需要为每个新点增加一个网格单元,这很容易用Numba加速到机器码速度,并且与Dask并行化很简单。不管数据集有多大,结果数组最多也就是显示屏的大小。因此,在一个单独的程序中处理,添加坐标轴、标签等非常便宜,而且它永远不会使你的浏览器崩溃。在

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

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

但是如果你真正想做的是看到数十亿个数据点的真实二维分布,Datashader是一个不错的选择,因为这就是它所做的一切。:-)

相关问题 更多 >