按两个分类变量嵌套分组的 Altair 箱线图

Altair boxplot with nested grouping by two categorical variables

如何在 altair 的 seaborn 中重现下图?

import seaborn as sns
tips = sns.load_dataset("tips")
ax = sns.boxplot(x="day", y="total_bill", hue="smoker",
             data=tips, palette="Set3")

这是我的尝试:

import altair as alt
chart = (
alt.Chart(tips)
.mark_boxplot()
.encode(x=alt.X("day"), y=alt.Y("total_bill"), color="smoker")
.interactive()
.properties(width=300))
chart.show()

这给了我这个不需要的图表:

将 smoker 放在 x 轴上,并使用当天的列分面并稍微调整一下填充和间距:

chart = alt.Chart(df).mark_boxplot(ticks=True).encode(
    x=alt.X("smoker:O", title=None, axis=alt.Axis(labels=False, ticks=False), scale=alt.Scale(padding=1)), 
    y=alt.Y("total_bill:Q"), 
    color="smoker:N",
    column=alt.Column('day:N', sort=['Thur','Fri','Sat','Sun'], header=alt.Header(orient='bottom'))
).properties(
    width=100
).configure_facet(
    spacing=0
).configure_view(
    stroke=None
)
chart