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

如何用Pandas的groupby缩减Altair绘图的行数

解决Altair 5000行数据限制的方案

针对你的WHO BMI数据集,以下几种方法可以快速缩减数据规模,同时满足可视化需求:

方法1:按年份聚合统计量

既然要展示年份(Period)和BMI最大值(FactValueNumericHigh)的关系,可直接按年份聚合计算统计值(如均值、极值),行数会直接降到年份的数量级:

# 按年份聚合,计算每年BMI的均值、最大值、最小值
df_agg = df_cropped.groupby("Period").agg(
    mean_bmi=("FactValueNumericHigh", "mean"),
    max_bmi=("FactValueNumericHigh", "max"),
    min_bmi=("FactValueNumericHigh", "min")
).reset_index()

# 可视化年份与BMI均值的关系
alt.Chart(df_agg).mark_point(filled=True).encode(
    alt.X("Period"),
    alt.Y("mean_bmi")
)

# 若需展示数据分布,可叠加极值区间图
alt.Chart(df_agg).mark_errorbar(extent='min-max').encode(
    x="Period:O",
    y=alt.Y("min_bmi", title="BMI Range"),
    y2="max_bmi"
) + alt.Chart(df_agg).mark_point(filled=True).encode(
    x="Period:O",
    y="mean_bmi"
)

方法2:随机抽样数据

如果想保留原始数据的点分布特征,可随机抽取不超过5000行的样本:

# 随机抽取4999行(留冗余避免触发限制),random_state保证结果可复现
df_sampled = df_cropped.sample(n=4999, random_state=42)

# 用抽样数据生成可视化图表
alt.Chart(df_sampled).mark_point(filled=True).encode(
    alt.X("Period"),
    alt.Y("FactValueNumericHigh")
)

方法3:临时取消Altair行数限制

如果必须展示全部数据,可临时关闭行数限制(注意:大数据量可能导致图表加载缓慢或浏览器卡顿):

# 禁用最大行数限制
alt.data_transformers.disable_max_rows()

# 直接用原始裁剪数据生成可视化
alt.Chart(df_cropped).mark_point(filled=True).encode(
    alt.X("Period"),
    alt.Y("FactValueNumericHigh")
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 11:05:05