如何在 Altair 中水平排列两个多面并排图表?

2024-06-08

Altair 为使用分面方法的分面图提供了可爱的功能。例如,以下数据集可以很好地可视化:

print(df[['Year', 'Profile', 'Saison', 'Pos']].to_csv())
,Year,Profile,Saison,Pos
0,2017,6.0,Sommer,VL
1,2017,6.0,Winter,VL
13,2017,6.0,Winter,HL
12,2017,6.0,Sommer,HL
18,2017,6.0,Sommer,HR
6,2017,6.0,Sommer,VR
7,2017,6.0,Winter,VR
19,2017,6.0,Winter,HR
14,2018,5.5,Winter,HL
8,2018,5.5,Winter,VR
15,2018,5.5,Sommer,HL
20,2018,4.3,Winter,HR
21,2018,5.0,Sommer,HR
3,2018,5.5,Sommer,VL
2,2018,6.2,Winter,VL
9,2018,4.5,Sommer,VR
17,2019,4.5,Sommer,HL
11,2019,4.2,Sommer,VR
22,2019,3.5,Winter,HR
10,2019,5.28,Winter,VR
5,2019,4.6,Sommer,VL
4,2019,4.9,Winter,VL
16,2019,4.0,Winter,HL
23,2019,4.5,Sommer,HR

使用以下命令:

alt.Chart(df).mark_bar().encode(x='Year:O', y='Profile:Q').facet(row='Saison:N', column='Pos:N')

但是,正如你所看到的,我在水平方向上仍然有很多空间,并且想通过重新排列来使用它Winter紧挨着的情节Summer plot:

我知道我已经使用列网格来对属性进行分面Pos,但对我来说视觉上Winter and Sommer地块是两个独立的地块(就像here https://stackoverflow.com/questions/58618197/produce-dodged-or-side-by-side-bar-column-charts-in-altair),我想将其并排放置。 我尝试在同一个单元格中创建两个不同的图表,并使用 html 并排发出它们,但在 Jupyter 环境中,每个单元格只能有一个 Altair/Vega 图。

有什么方法可以用来水平排列这些图表吗?


在 Altair 中,没有好的方法可以做到这一点,因为多面图表无法根据 Vega-Lite 架构进行嵌套。然而,Vega-Lite 渲染器实际上在某些情况下确实处理了这个问题,尽管它在技术上是被架构所不允许的。

因此,您可以通过执行以下操作来破解它:

chart = alt.Chart(df).mark_bar().encode(
    x='Year:O',
    y='Profile:Q'
).facet('Saison:N')

spec = alt.FacetChart(
    data=df,
    spec=chart,
    facet=alt.Facet('Pos:N')
).to_json(validate=False)

print(spec)

生成的规范可以手动粘贴到http://vega.github.io/editor http://vega.github.io/editor来揭示这一点(Vega 编辑器链接 https://vega.github.io/editor/#/url/vega-lite/N4KABGBEAkDODGALApgWwIaQFxUQFzwAdYsB6UgN2QHN0A6agSz0QFcAjOxge1IRQyUa6ALQAbZskoBmOgBY6ABjoArWNwB2kADTgo8TQDNG1bGFAQIkDACcA1mYuWrebtzF5GhMxtZixehAAvrrOkBSMyADujoGWkCgm+GbSioqhzlBRjAAmLGZyaXFBeiF6kDnoeJg4TlYa6KjIZhVVomkATACs0gDscsjoyAAccjns8F3wAJyKhnO908O9yL1dAIzTzaUZrdWwyHiwsWGV1SKdPf2DI2MTU7PzhovLqxtbZgDacRB1mZAABW4xxwkAAagAZHQ-eIAmzcYxiZo4ABsSgymSgAGV0Ix1FpQVjuKgmjZoZirABNQZknAdRTrXowsqYv5hIEgqCQ8kUwHwxHIsBo9Iwqw4vGaFoAdUYGjwyDJGP+1PQtLA9MZzKVv1FUA5LQAElDtbD+YwkWZhSaxbj8dLZfLFbrICq1RqmZiWZk2bDgYbjc64QjzYKrc7xXbCcTSTzMS6aWZ3VqYT6rPrQQaAEqx-5BgWW9Hh22SqMkhU5sKuxMMj2ZL3OVN6v2gsHZ616s0W1GFinY4sE7HR8vt+Oq6uaz0mxuA5tctuBzuhnu8iMlqAyuXD51Vuk15OswOzyBZium4NdoXLuOrgeQDeO09UhO7id1qeHznHgO9vnnwVdOguhHG97U3J0fx3dUGWGfdvQ-FpW0fDs-zMACgKLCVb3vLcIOfKD1hgycU3gjNv15PMQ1QwDgP7FoiTLcDeUgjVCLfYif3TKATxHCiLwUaQaMw0CHxHZjoNghsSK4+cOMXKiRR-EDSxjUS8JYiTLGnTjwTIuNeP-aiMMjQcGKQ0c3XEoiDw4o9uR4uTuw6QTjLvB0cKYtTLLY6zyNsmTyIcsAFHQxTaOU9y4zEgiNJ1GzPyNMz9IKQzQqE8LGMizzNhi8wpPBfy9MChQnKMtdIHolTtyy6Ycq0o9uIXFCcFkEKVzC9c3Iy5VqtqvLEPspqwAAjphmcsrsK6yseqsuC4oQ3TcyKugUTG28Koi7qxxfGqZskuaWwW9klumVbhI2qatvwnbvNm3z4sOs98xwBQFLatKOrAsyouu5x600vKGtkwbgtO9Kvumus4gAXR2cpDHQeBDhOeJjGQMQchafUlUgPAAE9CEFSANGJWV0DESBYasWACfgZGrDOGpcrjBomhaBmLkUbo+gGIZRnGSYZjmBYlhWNZNm2X7sfhxG8DplHInRujaJNHH8cJ4nUFJ8nimx6nkFp2oYUgZANAMHJZVMQ2fwADzluNUcV0Eq3bFw1ZabgbHNhptd7P6wlxu3-gdjHQSSl2oDxgmWgAR1YdA5WYKpGCoCnfZy6xVQcUF2DHYpShAIIgA):

您甚至会注意到 vega 编辑器将部分规范标记为无效。诚然,这不是最令人满意的答案,但它确实有效。

希望将来 Vega-Lite 模式能够添加对嵌套构面的实际支持,以便可以更直接地从 Altair 中使用它们。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Altair 中水平排列两个多面并排图表? 的相关文章

随机推荐