Быстрый способ сделать это - указать ось в качестве порядкового поля.Это приведет к очень уродливой оси, с часами, указанными для каждого тика.Чтобы изменить это, я добавляю столбец данных в рамку данных с заданной меткой.Я также добавил grid
, так как по умолчанию он удаляется для порядкового кодирования, и установил labelAngle
в 0.
df2 = df.assign(label=index.strftime('%b %d %y'))
alt.Chart(df2).mark_line().encode(
x=alt.X('label:O', axis=alt.Axis(grid=True, labelAngle=0)),
y='Y:Q'
)
Остерегайтесь, что это удалит любую отсутствующую точку.Итак, может быть, вы хотите добавить всплывающую подсказку.Это обсуждается в документации здесь .Вы также можете поиграть с labelOverlap
в настройке оси в зависимости от того, какую шляпу вы хотите.
Чтобы настроить ось, мы можем создать ее с помощью mark_text
и вернуть сетку с помощью mark_rule
и пользовательский фрейм данных.Он не обязательно хорошо масштабируется, но может дать вам некоторые идеи.
df3 = df2.loc[df2.index.dayofweek == 0, :].copy()
df3["Y"] = 0
text_chart = alt.Chart(df3).mark_text(dy = 15).encode(
x=alt.X('label:O', axis = None),
y=alt.Y('Y:Q'),
text=alt.Text('label:O')
)
tick_chart = alt.Chart(df3).mark_rule(color='grey').encode(
x=alt.X('label:O', axis=None),
)
line_chart = alt.Chart(df2).mark_line().encode(
x=alt.X('label:O', axis=None, scale=alt.Scale(rangeStep=15)),
y='Y:Q'
)
text_chart + tick_chart + line_chart