我正在尝试制作一个 Altair 分组条形图,其中每个组都有不同的类别。 standard 分组条形图绘图代码生成的图,其中每个图的 x 轴包含所有类别,包括特定组未使用的类别。 以下代码和生成的图说明了该问题:
import altair as alt
import pandas as pd
# Sample data
data = {
'Group': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'],
'Category': ['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3'],
'Value': [10, 15, 7, 8, 12, 18, 12, 10, 9]
}
df = pd.DataFrame(data)
# Create the grouped bar chart
chart = alt.Chart(df).mark_bar().encode(
x=alt.X('Category:N', title='Category'),
y=alt.Y('Value:Q', title='Value'),
column=alt.Column('Group:N', title='Group')
)
chart
有没有一种简单的方法可以删除没有特定组数据的类别? 也就是说,上面的图表应该有 3 个方面。 第一个面应仅包含 {A1, A2, A3} 的条形图和 x 轴,第二个和第三个面应分别包含 B 和 C 类别。 如果没有简单的方法来做到这一点,我看到两种可能的方法:
手动删除组中不包含数据的每个方面的类别。 我该怎么做?
创建单独的条形图,然后水平连接它们。 我希望这些图共享相同的比例(以及我稍后将添加的其他属性,例如颜色),并且每个子图也有“组”标签。 有没有一种简单的方法可以做到这一点,不需要大量的样板(例如手动计算数据范围,向每个子图添加组标题等)?
Altair 能够独立解析每个轴的比例:
import altair as alt
import pandas as pd
# Sample data
data = {
'Group': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'],
'Category': ['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3'],
'Value': [10, 15, 7, 8, 12, 18, 12, 10, 9]
}
df = pd.DataFrame(data)
# Create the grouped bar chart
chart = alt.Chart(df).mark_bar().encode(
x=alt.X('Category:N', title='Category'),
y=alt.Y('Value:Q', title='Value'),
column=alt.Column('Group:N', title='Group')
)
chart.resolve_scale(x='independent')