You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Altair基于已堆叠数据无需预处理绘制正确堆叠柱状图

可以实现,直接用Altair内置的数据转换功能即可,全程不需要修改原始DataFrame。

你可以通过transform_calculate在绘图时直接计算出未检测的数量,再用transform_fold完成列转行操作,所有转换都在绘图上下文内完成,不会改动原始数据,示例代码如下:

import pandas as pd
import altair as alt

df = pd.DataFrame({
  'date': ['2021-01-01', '2021-02-01', '2021-03-01'],
  'total': [10, 15, 20],
  'tested': [0, 5, 10]
})

alt.Chart(df).transform_calculate(
    # 内部计算未检测数量,不写入原始df
    untested = alt.datum.total - alt.datum.tested
).transform_fold(
    # 等效于pandas的melt,内部完成格式转换
    ['tested', 'untested'],
    as_ = ['variable', 'value']
).mark_bar().encode(
    x='date:O',
    y='value:Q',
    color='variable:O'
)

你也可以用图层叠加的方式实现,逻辑更直观,底层绘制总数量的柱子作为未检测部分,上层叠加已检测数量的柱子,同样不需要修改原始数据:

base = alt.Chart(df).encode(x='date:O')
# 底层总数量,对应未检测部分
untested_layer = base.mark_bar(color='#1f77b4').encode(y='total:Q')
# 上层已检测数量
tested_layer = base.mark_bar(color='#ff7f0e').encode(y='tested:Q')
# 叠加图层输出
alt.layer(untested_layer, tested_layer)

两种方法输出的堆叠柱最高高度都为对应total值,和预期效果完全一致。

内容的提问来源于stack exchange,提问作者felipecrp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 12:45:08