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

Altair负数值面积图:如何填充曲线下方而非上方区域?

解决方案

要实现你需要的反向填充效果,只需通过两步调整:反转y轴让0位于图表顶部,同时指定面积图的填充边界为数据集的最小y值(图表底部)。因为你无法提前预知数据最值,可借助Altair的聚合变换自动计算最小值,无需提前在Pandas中预处理数据。

实现代码

import altair as alt
import pandas as pd

data = pd.DataFrame({
    'x': range(10),
    'y': [-2, -1, -3, -2, -4, -3, -4, -2, -3, -4],
})

alt.Chart(data).transform_aggregate(
    y_min='min(y)',  # 计算全局y的最小值
    groupby=[]       # 不分组,对整个数据集执行聚合
).mark_area().encode(
    x='x',
    y=alt.Y('y', scale=alt.Scale(domainReverse=True)),  # 反转y轴,0显示在顶部
    y2='y_min:Q'     # 设置填充的下边界为y的最小值,实现曲线下方填充
)

关键参数说明

  • transform_aggregate:自动计算整个数据集的y最小值,避免手动获取最值的麻烦;
  • domainReverse=True:反转y轴刻度方向,让0值处于图表顶部,更负的数值(地下水位更深)靠近图表底部,符合地下水位的直观展示逻辑;
  • y2='y_min:Q':定义面积图的填充下边界为y的最小值,这样填充区域就会是曲线到图表底部的部分,和Excel的反向填充效果完全一致。

也可以用baseline参数替代y2,效果相同:

alt.Chart(data).transform_aggregate(
    y_min='min(y)',
    groupby=[]
).mark_area().encode(
    x='x',
    y=alt.Y('y', scale=alt.Scale(domainReverse=True)),
    baseline=alt.Baseline('y_min:Q')
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 15:02:52