如何为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,是因为示例里把upperfence和q3设成了相同的值——而实际上,lowerfence就是用来指定箱线图“下须”的端点(也就是你要的min),upperfence是“上须”的端点(也就是你要的max),q1和q3才是箱体的上下四分位数边界。
那你只需要把自己预计算好的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




