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

使用Altair的Facet功能时去除甘特图中的空白行

问题描述

使用Altair的alt.Facet按group列分组生成甘特图后,group1子图中出现了任务4和5的空白行,希望仅保留有内容的行。

原代码如下:

import altair as alt
import pandas as pd

source = pd.DataFrame([
    {"task": 1, "start": 1, "end": 3, "group": 1},
    {"task": 2, "start": 3, "end": 8, "group": 1},
    {"task": 3, "start": 8, "end": 10, "group": 1},
    {"task": 1, "start": 1, "end": 3, "group": 2},
    {"task": 2, "start": 3, "end": 8, "group": 2},
    {"task": 3, "start": 8, "end": 10, "group": 2},
    {"task": 4, "start": 10, "end": 13, "group": 2},
    {"task": 5, "start": 13, "end": 14, "group": 2},
])


chart = alt.Chart(source).mark_bar().encode(
    x=alt.X('start', type="quantitative"),
    x2=alt.X2('end'),
    y=alt.Y('task', type="ordinal"),
    facet=alt.Facet("group", type="nominal", columns=1)
)
解决方法

问题根源是默认分面配置会共享y轴刻度,导致group1子图显示所有任务的行。只需在图表配置中添加resolve_scale(y='independent'),让每个分面的y轴独立计算,就能只显示当前分组存在的任务:

修改后的代码:

import altair as alt
import pandas as pd

source = pd.DataFrame([
    {"task": 1, "start": 1, "end": 3, "group": 1},
    {"task": 2, "start": 3, "end": 8, "group": 1},
    {"task": 3, "start": 8, "end": 10, "group": 1},
    {"task": 1, "start": 1, "end": 3, "group": 2},
    {"task": 2, "start": 3, "end": 8, "group": 2},
    {"task": 3, "start": 8, "end": 10, "group": 2},
    {"task": 4, "start": 10, "end": 13, "group": 2},
    {"task": 5, "start": 13, "end": 14, "group": 2},
])


chart = alt.Chart(source).mark_bar().encode(
    x=alt.X('start', type="quantitative"),
    x2=alt.X2('end'),
    y=alt.Y('task', type="ordinal"),
    facet=alt.Facet("group", type="nominal", columns=1)
).resolve_scale(y='independent')  # 添加此行实现独立y轴

修改完成后,group1子图只会显示任务1、2、3的行,不再出现任务4、5的空白行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 03:31:36