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
相关产品推荐
相关产品推荐

