Вы можете использовать свойство оси tickCount
, чтобы указать, сколько тиков вы хотите, и метки автоматически выбираются так, чтобы они не перекрывались:
import altair as alt
import pandas as pd
df = pd.DataFrame({
'bin': [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5,
1.6, 1.7, 1.8, 1.9, 2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3.0],
'count': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 7, 14, 13, 29, 47,
59, 59, 75, 72, 103, 96, 119, 76, 93, 68, 70, 44, 49]
})
alt.Chart(df).mark_bar().encode(
x=alt.X('bin:Q', axis=alt.Axis(tickCount=df.shape[0], grid=False)),
y=alt.Y('count:Q')
)

Если вы хотите дополнительно настроить расположение меток и текст, вы можете использовать labelExpr . Например:
alt.Chart(df).mark_bar().encode(
x=alt.X('bin:Q', axis=alt.Axis(
tickCount=df.shape[0],
grid=False,
labelExpr="datum.value % 1 ? null : datum.label"
)),
y=alt.Y('count:Q')
)
