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

在Altair中添加独立的第二X轴以展示对应周的月份

在Altair中添加独立的第二X轴以展示对应周的月份

嘿,我明白你想给图表加一个独立的第二X轴来标注每个周对应的月份,现在你用文本标记的方式虽然能显示月份,但看起来有点拥挤重复对吧?咱们可以通过预处理数据+调整Altair的轴配置,做出更规整的独立第二X轴效果。

首先,我们先对数据做个小处理,找出每个月份的第一个周,这样就不会重复显示同一个月份的标签了:

# 标记每个月的第一个周(和上一行月份不同的就是新月份的开始)
df['is_first_week_of_month'] = df['month'] != df['month'].shift(1)
# 筛选出每个月的第一周数据,用来做月份标签
month_ticks = df[df['is_first_week_of_month']]

接下来,我们把原来的month_labels改成专门的月份轴层,只在每个月的起始位置显示月份,并且把它做成一个独立的底部轴:

# 创建月份第二轴的文本标签层
month_axis = alt.Chart(month_ticks).mark_text(
    align='center', baseline='top', dy=5, fontSize=12
).encode(
    x=alt.X('week:O', axis=alt.Axis(
        title='Month',
        labels=False,  # 隐藏周数刻度,只保留月份文本
        ticks=False,
        domain=False,  # 隐藏轴的线条
        titlePadding=20  # 调整标题和标签的间距
    )),
    text='month:N'
)

然后调整主图表的X轴配置,给第二轴留出空间,再把所有图层组合起来:

# 主柱状图和折线图部分保持你的原有代码,这里只调整组合逻辑
combined_chart = alt.layer(rain_calendar, line, month_axis).resolve_scale(x='shared').configure_axisX(
    labelAlign="right", labelAngle=-45, titlePadding=10, titleFontSize=14,
    offset=20  # 把主X轴往上挪一点,给月份轴留出位置
).configure_axisY(titlePadding=10, titleFontSize=14).configure_bar(binSpacing=0)

这样修改后,你的图表就会有两个清晰的X轴:上方是“Week in calendar year”的周数轴,下方是“Month”的月份轴,每个月份只会在对应的第一个周位置显示一次,不会再拥挤重复啦。你还可以根据自己的需求调整dy(文本距离轴的垂直距离)、fontSize这些参数,让标签位置更顺眼。

备注:内容来源于stack exchange,提问作者Luckasino

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 18:19:53