在Altair直方图中设置分类列顺序

1 投票
2 回答
44 浏览
提问于 2025-04-14 18:09

我想要在直方图中交换列的顺序。

data = {'Age group': {0: '0 - 4', 1: '12 - 16', 2: '5 - 11', 3: 'not specified'},
 'Count': {0: 81.0, 1: 86.0, 2: 175.0, 3: 0.0}}

dp = pd.DataFrame(data)

alt.Chart(dp).mark_bar().encode(
    x=alt.X('Age group:N', title='Age group'),
    y='Count:Q',
    tooltip=['Age group', 'Count']
).properties(title='Number of children in voucher', width=400)

在这里输入图片描述

我只是想换一下顺序,但找不到方法。

2 个回答

1

除了可以通过 sort 直接在 altair 中设置类别的顺序之外,当你处理分类数据时,altair 还能够从 pandas 数据框中推断出顺序(这对于其他 pandas 操作来说也可能更方便):

import pandas as pd
import altair as alt


data = pd.DataFrame({
    'Age group': {0: '0 - 4', 1: '12 - 16', 2: '5 - 11', 3: 'not specified'},
    'Count': {0: 81.0, 1: 86.0, 2: 175.0, 3: 0.0}
})

data['Age group'] = pd.Categorical(
    data['Age group'],
    ['0 - 4', '5 - 11', '12 - 16', 'not specified'],
    ordered=True
)

alt.Chart(data, title='Number of children in voucher', width=200).mark_bar().encode(
    x='Age group',
    y='Count:Q',
    tooltip=['Age group', 'Count']
)

enter image description here

2

Alt.X 模式中有一个叫做 sort 的参数,它可以接受 一个数组,用来指定字段值的优先顺序

X_ORDER = ["0 - 4", "5 - 11", "12 - 16", "not specified"] # >> set an order

alt.Chart(dp).mark_bar().encode(
    x=alt.X(
        "Age group:N",
        title="Age group",
        sort=X_ORDER, # >> add this line
    ),
    y="Count:Q",
    tooltip=["Age group", "Count"],
).properties(title="Number of children in voucher", width=400)

输出结果:

在这里输入图片描述

撰写回答