【问题标题】:Plotly/Dash large dataset Densitymapbox memory usagePlotly/Dash 大数据集 Densitymapbox 内存使用情况
【发布时间】:2021-03-03 03:56:20
【问题描述】:

我有一个包含数百万纬度/经度点的数据集,我们使用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 位)整数,这应该只有 (1093737 * (8 + 8 + 8)),并且发送到浏览器的数据量确实表明了这一点。但是,浏览器进程在内存中膨胀到超过 3.5GB,然后在随后重新加载时,浏览器似乎内存不足。

dash/plotly 中是否有任何工具可以防止浏览器崩溃?我不需要与密度图的点进行交互,并设置了hoverinfo='skip' 来表明这一点,但希望在地图缩放发生变化时保持热图的交互性重新计算覆盖。我正在研究其他替代方案,例如使用datashader 光栅化热图服务器端,但这会删除我想保留的这种交互性。

【问题讨论】:

  • 嗨@clcto!我遇到了同样的问题。您找到解决问题的方法了吗?

标签: python plotly plotly-dash


【解决方案1】:

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 的创建者。

【讨论】:

  • 谢谢,我会仔细看看,但似乎不支持 Densitymapbox。另外,我将如何在现有的仪表板应用程序中使用DynamicPlot?这是所有客户端还是每次缩放更改时我都必须重新加载数据?
  • 我更新了我的答案以展示一个现在正式支持的密度图框的示例。我还扩展了此处的文档,以展示您将如何在自己的 Dash 应用程序中使用它。 lenspy.readthedocs.io/en/latest/… 这遵循客户端 服务器模型。大图导致浏览器崩溃的原因是您在浏览器中渲染了整个 css 和 html。由于您的图形是由 html/css 组成的,因此在浏览器中呈现 32 位值时,它的大小很容易增加三倍。
  • 有没有一个 R 闪亮的等价物?
猜你喜欢
  • 2012-10-19
  • 2014-01-04
  • 2022-01-17
  • 2021-08-02
  • 2019-12-14
  • 1970-01-01
  • 2013-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多