Using a data frame of dates and values starting from 1 Jan 2022: import datetime as dt import altair as alt import polars as pl import numpy as np alt.renderers.enable("browser") dates = pl.date_range(dt.date(2022, 1, 1), dt.date(2025, 1, 22), "1d", eager = True) values = np.random.uniform(size = len(dates)) df = pl.DataFrame({"dates": dates, "values": values}) alt.Chart(df).mark_point().encode(alt.X("dates:T"), alt.Y("values:Q")).show()   But if I start the data frame from 2020 and filter it for dates > 1 Jan 2022: dates_b = pl.date_range(dt.date(2020, 1, 1), dt.date(2025, 1, 22), "1d", eager = True) values_b = np.random.uniform(size = len(dates_b)) df_b = pl.DataFrame({"dates": dates, "values": values}) alt.Chart(df_b.filter(pl.col("dates") > dt.date(2022, 1, 1))).mark_point().encode(alt.X("dates:T"), alt.Y("values:Q")).show()   How can I specify that years must be shown? Note that I do get the right result if I filter using >= to include 1 Jan 2022, but that's besides the point. I always need years.
You can use labelExpr to build your own logic for setting tick labels. For example, this gives the year if the month is January and the month otherwise. dates_b = pl.date_range(dt.date(2020, 1, 1), dt.date(2025, 1, 22), "1d", eager=True) values_b = np.random.uniform(size=len(dates_b)) df_b = pl.DataFrame({"dates": dates, "values": values}) alt.Chart(df_b.filter(pl.col("dates") > dt.date(2022, 1, 1))).mark_point().encode( alt.X("dates:T").axis( labelExpr="timeFormat(datum.value, '%m') == '01' ? timeFormat(datum.value, '%Y') : timeFormat(datum.value, '%b')", ), alt.Y("values:Q"), )  