К сожалению, при использовании кодирования строки невозможно отобразить ось X на нескольких графиках. В качестве обходного пути вы можете вручную vconcat построить диаграммы на основе отфильтрованных данных:
chart = alt.Chart(data).mark_point().encode(x="x:Q", y="y:Q")
alt.vconcat(
chart.transform_filter(alt.datum.category == 'a'),
chart.transform_filter(alt.datum.category == 'b')
)
Чтобы избежать выписывания значений столбцов вручную, вы можете генерировать различные подкарты с помощью инструментов Python; например, это эквивалентно приведенному выше:
df = pd.DataFrame.from_records([
{ "category" : "a", "x" : 1, "y" : 2 },
{ "category" : "a", "x" : 2, "y" : 4 },
{ "category" : "b", "x" : 1, "y" : 3 },
{ "category" : "b", "x" : 2, "y" : 5 }
])
chart = alt.Chart(df).mark_point().encode(x="x:Q", y="y:Q")
alt.vconcat(
*(chart.transform_filter(alt.datum.category == val)
for val in df['category'].unique())
)