如何用Altair制作支持单选切换月度/年度聚合的交互式折线图
实现方案
该需求完全可以实现,借助Altair自带的参数绑定、条件编码能力,仅需一份代码即可生成支持单选按钮切换的交互式图表,无需拆分多个静态图。
完整可运行代码
import altair as alt from vega_datasets import data # 加载示例数据集 source = data.stocks() # 预提取年份字段 source['year'] = source.date.dt.year # 创建视图切换单选按钮 view_switch = alt.param( value="月度", bind=alt.binding_radio( options=["月度", "年度"], name="选择视图:" ) ) # 构建交互式图表 chart = alt.Chart(source).add_params( view_switch ).transform_calculate( # 动态计算X轴取值 x_value = alt.condition(view_switch == "月度", alt.datum.date, alt.datum.year) ).transform_aggregate( # 动态聚合逻辑:月度保留原始价格,年度计算年均价 calc_price = "mean(price)", groupby = ["symbol", alt.expr.if_(view_switch == "月度", "date", "year")] ).encode( x = alt.X( "x_value:T" if view_switch == "月度" else "x_value:N", title = "时间", axis = alt.Axis( format = alt.condition(view_switch == "月度", "%Y-%b", "d"), grid = False ) ), y = alt.Y( "calc_price:Q", title = alt.condition(view_switch == "月度", "价格", "年度平均价格") ), color = "symbol:N" ).mark_line().properties( width = 600 ) chart
核心逻辑说明
- 首先创建单选按钮绑定参数,提供月度、年度两个切换选项,设置默认显示月度视图
- 通过条件计算动态确定X轴的取值、格式,以及Y轴的聚合规则:月度视图直接使用原始日期和价格数据渲染,年度视图自动按年份+股票分组计算年度均价后渲染
- 坐标轴标题会随视图切换自动更新,无需额外配置
运行代码后即可生成交互式图表,点击对应单选按钮即可在两个视图间无缝切换。
内容的提问来源于stack exchange,提问作者shimiao
相关产品推荐
相关产品推荐

