使用自 2022 年 1 月 1 日起的日期和值数据框:
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()
但是如果我从 2020 年开始数据框并筛选日期 > 2022 年 1 月 1 日:
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()
如何指定必须显示年份?
请注意,如果我使用
>=
进行过滤以包含 2022 年 1 月 1 日,我确实会得到正确的结果,但这不是重点。我总是需要几年。
您可以使用
labelExpr
构建自己的逻辑来设置刻度标签。例如,如果月份是一月,则给出年份,否则给出月份。
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"),
)