Altair - 添加颜色时条形图域裁剪错误

Altair - Bar Chart Domain Cropping Error when adding Color

我有一个显示多种语言的百分比值的条形图。

chart = alt.Chart(df_lang_perc).mark_bar().encode(
    x=alt.X('Lang:N', sort='-y', title='Language'),
    y=alt.Y('perc_pos:Q', title='Percentage of Positive Reviews', scale=alt.Scale(domain=[0.7,1]), axis=alt.Axis(format='%')),
)

chart.display()

在DataFrame中,每种语言都被归类到一个市场中。当我尝试按语言添加颜色时,Altair 在将条形裁剪到正确长度时出现错误。

chart = alt.Chart(df_lang_perc).mark_bar().encode(
    x=alt.X('Lang:N', sort='-y', title='Language'),
    y=alt.Y('perc_pos:Q', title='Percentage of Positive Reviews', scale=alt.Scale(domain=[0.7,1]), axis=alt.Axis(format='%')),
    color=alt.Color('market')
)

chart.display()

这是已知问题吗?有解决方法吗?

最小可重现示例:

df_lang_perc = pd.DataFrame({
    'Lang': ['brazilian', 'czech', 'english', 'latam', 'thai'],
    'perc_pos': [0.936053, 0.906603, 0.881611, 0.918832, 0.904748],
    'market': ['Latin_America', 'Europe', 'Emglish', 'Latin_America', 'Asia']
})

我不确定为什么在按颜色分组时会发生这种情况,但这与轴外的剪贴图元素有关,您可以使用 mark_bar(clip=True) 作为图表的解决方法来强制执行此操作。

编辑:我实际上认为错误在于蓝条被自动切割(不确定这是 Altair 的问题,还是 JupyterLab 等前端的问题)。我相信在 VegaLite 中条形总是扩展到零,除非明确地剪裁以阻止放大小差异,除非它是仔细和有意地完成的。这也是图表在 VegaLite 在线编辑器中的行为方式,其中彩色条和非彩色条都需要明确的 clip=True 以避免延伸到 x 轴下方。

clamp=True 添加到 Y 的比例参数(或添加到单独的 configure_scale)也解决了这个问题。

文档指出 True 是默认设置,但也将 clamp=False 设置为 'non-colored' 条形图,也不会扩展条形。
alt.Scale Documentation