gpt4 book ai didi

python - 为什么 plotly express 比 plotly graph_objects 更高效?

转载 作者:行者123 更新时间:2023-12-05 03:16:45 26 4
gpt4 key购买 nike

我正在可视化包含 40 万到 250 万个点的散点图。我预计需要在可视化之前进行下采样,但要看看我用 plotly express 中的 400k 数据集运行了多少试点测试,并且快速、精美且响应迅速地弹出了绘图。

为了制作交互式图形,我真的需要使用 plotly.graph_objects,因为我需要具有不同色阶的多条轨迹,所以我用 graph_objects 制作了基本相同的图形,它不仅速度慢,还使我的计算机崩溃。

我真的很想尽可能少地进行下采样,我对这两种方法之间的绝对性能差异感到惊讶,所以我想这可以归结为我的问题:

为什么会有这样的性能差异,是否可以更改布局/图形/graph_objects 中的任何参数以缩小差距?

这里是一个片段来展示我所说的基本相同的图表的意思:

图形对象

        fig = go.Figure()
fig.add_trace(go.Scatter(x = x_values, y = y_values, opacity = opacity, marker = {
'size': size,
'color': community,
'colorscale': colorscale
}))

express

        pacmap_map = px.scatter(x = x_values, y = y_values, color_continuous_scale=colorscale,  opacity = opacity, color = community)
pacmap_map.update_traces(marker = {
'size': size
})

我本来期望性能是相同的,或者至少在相同的范围内,但是 express 像梦一样工作,而 graph_objects 会使 jupyter 内核和它运行的任何 IDE 崩溃,所以有很大的不同。

最佳答案

运行以下简单示例:

import numpy as np
import plotly.graph_objects as go
import plotly.express as px

x = np.linspace(-2, 2, 100000)
y = np.cos(x)

fig = go.Figure(data=[go.Scatter(x=x, y=y)])
fig2 = px.scatter(x=x, y=y)

type(fig.data[0]), type(fig2.data[0])
# out: (plotly.graph_objs._scatter.Scatter, plotly.graph_objs._scattergl.Scattergl)

如您所见,当点数高于某个阈值时,plotly express 似乎会切换到 Scattergl。 Scattergl 在 html5 Canvas 上呈现,因此它使用 GPU(因此效率)。而 Scatter 创建的 svg 对象被插入到当前文档中,消耗了更多的内存。

关于python - 为什么 plotly express 比 plotly graph_objects 更高效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74536056/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com