You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何为Plotly Graph Objects中传入预计算四分位数的Box组件设置自定义最小值和最大值

如何为Plotly Graph Objects中传入预计算四分位数的Box组件设置自定义最小值和最大值

我看你现在的需求很明确:已经自己算出了箱线图需要的min、max、四分位数等所有聚合统计量,想直接传给Plotly的go.Box组件,既解决全量数据渲染的性能问题,又能让箱线图的min/max和四分位数(q1/q3)显示不同的数值,对吧?

首先得理清Plotly预计算箱线图的参数逻辑:官方示例里的Box Plot With Precomputed Quartiles之所以看起来把q3当max,是因为示例里把upperfenceq3设成了相同的值——而实际上,lowerfence就是用来指定箱线图“下须”的端点(也就是你要的min),upperfence是“上须”的端点(也就是你要的max),q1q3才是箱体的上下四分位数边界。

那你只需要把自己预计算好的min赋值给lowerfence,max赋值给upperfence,其他聚合参数保持不变就行,修改后的代码如下:

import plotly.graph_objects as go

fig = go.Figure()

fig.add_trace(go.Box(
    q1=[你预计算的q1值1, 你预计算的q1值2, 你预计算的q1值3], 
    median=[你预计算的中位数1, 你预计算的中位数2, 你预计算的中位数3],
    q3=[你预计算的q3值1, 你预计算的q3值2, 你预计算的q3值3], 
    lowerfence=[你的自定义min值1, 你的自定义min值2, 你的自定义min值3],  # 替换为你的min
    upperfence=[你的自定义max值1, 你的自定义max值2, 你的自定义max值3],  # 替换为你的max
    mean=[你预计算的均值1, 你预计算的均值2, 你预计算的均值3],
    sd=[你预计算的标准差1, 你预计算的标准差2, 你预计算的标准差3],
    name="自定义Min/Max的预计算箱线图"
))

fig.show()

这样设置后,你就能看到箱线图的须会准确延伸到你指定的min和max,箱体则保持q1到q3的范围,完全符合你想要的“经验值(q3)和max值不同”的显示效果。

对比你之前用全量DataFrame渲染的方式:这种预计算参数的渲染模式,Plotly不需要处理和加载所有原始数据,只需要渲染几个聚合后的统计值,性能会大幅提升,不会出现渲染卡顿的问题;同时统计量的显示又和全量数据渲染的效果一致。

给你看个直观的参考:

  • 这是官方示例把upperfence和q3设为相同值的效果:
    官方预计算箱线图效果
  • 这是你用全量数据渲染的理想效果(性能差但显示正确):
    全量数据渲染的箱线图效果
  • 这是你预计算好的包含不同max值的统计数据:
    预计算的聚合统计数据

用上面的代码替换参数后,就能得到和全量数据渲染一样的显示效果,同时拥有预计算模式的高性能。

备注:内容来源于stack exchange,提问作者greggyNapalm

火山引擎 最新活动