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

Altair分面绘图报SchemaValidationError及按季筛选功能实现咨询

报错解决

你遇到的data属性缺失报错是分面和属性设置的顺序错误导致:facet()方法会从基础Chart生成新的FacetChart对象,在facet()之后调用properties()会覆盖原有配置,导致数据源丢失。同时你当前的编码缺少Y轴字段,也没有显式指定堆叠配置,无法生成横向堆叠条形图。

修正后的基础可运行代码如下:

import altair as alt

# 基础配置全部设置完成后再调用facet分面
chart = alt.Chart(df_q4).mark_bar().encode(
    # 替换category为你实际的Y轴分类列名
    y=alt.Y('category:N', axis=alt.Axis(title=''), sort='-x'),
    x=alt.X('value:Q', axis=None, stack='zero'), # 显式指定堆叠规则
    color=alt.Color('color_code:N', scale=None) # 若color_code存储实际色值,该配置可直接生效
).properties(
    width=400,
    height=700
).facet(
    # 按title分行分面,适配横向条形图展示
    row=alt.Row('title:N', header=alt.Header(title=''))
)

chart

季度筛选函数封装

你可以按照需求封装成参数化函数,示例如下:

def color_palette(season):
    # 按传入季度筛选数据,需替换为你实际的季度字段名和匹配规则
    filter_df = df[df['season'] == season].copy()
    
    chart = alt.Chart(filter_df).mark_bar().encode(
        y=alt.Y('category:N', axis=alt.Axis(title=''), sort='-x'),
        x=alt.X('value:Q', axis=None, stack='zero'),
        color=alt.Color('color_code:N', scale=None),
        # 可选添加悬停提示
        tooltip=['category:N', 'value:Q', 'title:N']
    ).properties(
        width=400,
        height=700
    ).facet(
        row=alt.Row('title:N', header=alt.Header(title=''))
    )
    return chart

# 调用示例,生成第四季度的图表
color_palette('Q4')

可选调整说明

  • 如果不需要按title分面为多行,而是要在单个图表内展示所有title的堆叠条,可以把title:N放到Y轴编码的层级,删除facet配置即可
  • 若需要调整分面的间距、排序规则,可在alt.Row()内添加sort、spacing参数自定义

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:36:04