你有一些人所说的宽格式数据,而 Altair 最适合长格式数据。更多讨论请见Altair's documentation。
短版:如果您想用这种数据制作分组条形图,您首先必须重新塑造数据框。 melt() 方法可以对此有所帮助:
import altair as alt
import pandas as pd
df = pd.DataFrame({
'index': range(5),
'price_2010': [12, 14, 10, 9, 6],
'price_2020': [14, 15, 12, 14, 10]
})
alt.Chart(df.melt('index')).mark_bar().encode(
alt.X('variable:N', axis=alt.Axis(title='')),
alt.Y('value:Q', axis=alt.Axis(title='price', grid=False)),
color=alt.Color('variable:N'),
column='index:O'
).configure_view(
stroke='transparent'
)
另请注意,当 Altair 3.0 发布时,它将包含 fold transform,这将允许您执行 df.melt() 完成的操作作为图表规范的一部分,而不是作为预处理步骤。