Plotly/Dash大型数据集密度映射框内存使用情况



我有一个包含数百万个纬度/经度点的数据集,我们正在使用plotly-dashDensitymapbox:以高分辨率绘制这些点

data = pandas.DataFrame()
# ...
go.Densitymapbox(
lat=data['Latitude'],
lon=data['Longitude'],
z=data['Count'],
hoverinfo='skip',
# ...
)

根据Mapbox的说法,他们的库应该支持数百万个点,而不会出现问题,正如他们的演示所示。@https://demos.mapbox.com/100mpoints/

当我尝试这样做时,Mapbox似乎能够处理这些请求。然而,在我使用plotly/dash的实现中,与上面的演示不同,浏览器处于水下。第一次加载运行良好(尽管确实使用了大量内存(,但在重新加载数据时,Chrome崩溃,Firefox向控制台报告内存不足错误,并且不会更新热图。

我使用的数据集是1093737点。做餐巾纸后面的数学运算,这应该只有<2个双精度浮点值和1(64位(整数的25 MB数据(1093737 * (8 + 8 + 8)),发送到浏览器的数据量确实显示了这一点。然而,浏览器进程在内存中膨胀到超过3.5GB,然后在随后的重新加载中,浏览器似乎耗尽了内存。

dash/plotly中是否有任何设施可以防止浏览器关闭?我不需要与密度图的点交互,并且已经设置了hoverinfo='skip'来指示这一点,但当地图缩放发生变化时,我希望保持热图重新计算覆盖的交互性。我正在研究其他替代方案,例如使用datashader光栅化热图服务器端,但这将消除我希望保留的这种交互性。

创建LensPy就是为了解决这个确切的问题。它建立在Plotly Dash之上,允许您绘制非常大的数据集,同时保持流畅的交互性。下面是一个如何使用Mapbox实现这一点的示例。
import pandas as pd
import plotly.express as px
from lenspy import DynamicPlot
df = pd.read_csv(
'https://raw.githubusercontent.com/plotly/datasets/master/earthquakes-23k.csv')
fig = px.density_mapbox(df,
lat='Latitude', lon='Longitude',
z='Magnitude',
radius=10,
center=dict(lat=0, lon=180),
zoom=0,
mapbox_style="stamen-terrain")
plot = DynamicPlot(fig)
plot.show()

免责声明:我是LensPy的创建者。

最新更新