如何为Altair条形图设置0-24小时的X轴时间刻度?
解决Altair条形图X轴00:00到23:59刻度范围问题
问题根源是你使用timeUnit="hoursminutes"后,用完整pd.Timestamp对象作为scale domain,和Altair处理后的数据类型不匹配,导致X轴无法渲染。正确做法是针对hoursminutes时间单位,直接用小时分钟格式的字符串作为domain范围。
修改后的完整代码如下:
import pandas as pd import streamlit as st import altair as alt sample_df = pd.DataFrame({ "Name": ["Abby", "Cathy", "Ellen", "Holly"], "Start time": [ "1900-01-01 09:00:00", "1900-01-01 09:30:00", "1900-01-01 10:00:00", "1900-01-01 10:00:00" ], "End time": [ "1900-01-01 10:00:00", "1900-01-01 10:30:00", "1900-01-01 11:00:00", "1900-01-01 11:00:00" ], }) x_axis = alt.Axis(format="%-H:%M", tickCount=24) c = ( alt.Chart(sample_df) .mark_bar() .encode( x=alt.X( "Start time", type="temporal", timeUnit="hoursminutes", axis=x_axis, scale=alt.Scale(domain=["00:00", "23:59"]) # 改用小时分钟字符串作为范围 ).title("Time (24-hour format)"), x2=alt.X2("End time", timeUnit="hoursminutes"), y=alt.Y('Name:N').title(None) ) ) st.altair_chart(c, use_container_width=True)
关键说明:
- 当使用
timeUnit="hoursminutes"时,Altair会提取原始datetime数据的小时和分钟部分处理,此时scale的domain需匹配这种简化的HH:MM格式字符串,而非完整Timestamp对象。 tickCount=24会让X轴自动生成00:00到23:00的刻度,配合format="%-H:%M"确保显示为24小时制时间格式。
内容的提问来源于stack exchange,提问作者Dylan Klomparens
相关产品推荐
相关产品推荐

