我想了解Datashader
与其他图形库如plotly/matplotlib
等之间的明显区别
我知道为了绘制数以百万计/十亿计的数据点,我们需要datashader,因为其他绘图库会挂断浏览器。
但是究竟是什么原因使数据阴影变得更快而不会挂断浏览器?绘图是如何完成的而不会给浏览器带来任何负载????
另外,datashader不会给浏览器带来任何负载,因为在后端datashader会根据我的dataframe创建一个图形,并且只将图像发送到浏览器,这就是为什么它很快??在
请解释一下,我无法清楚地理解进出。在
Tags:
从datashader docs开始
在这些库中没有任何技巧-渲染大量的点需要很长时间。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是一个不错的选择,因为这就是它所做的一切。:-)
相关问题 更多 >
编程相关推荐