根据从 Altair 条形图中的数据库收到的数据更改标签

Change labels from data received from database in Altair bar graph

我正在尝试根据从数据库收到的数据编辑标签。截至目前,我已尝试使用 .transform_fold() 但是当我 运行 我的代码出现时,正确的标题出现但图表上没有显示数据。

在没有 .transform_fold() 的情况下,图表如下所示:

并像以下一样使用 .transform_fold():

我想像这样更改标题:

title from data New title
audiobook_processed Audiobooks processed
n_known_errors Known Errors
n_unknown_errors Unknown Errors

我收到的数据是这样的:

date value name
2022-01-19 98 audiobook_processed
2022-01-19 69 n_known_errors
2022-01-19 2 n_unknown_errors

我的代码:

import altair as alt
import streamlit as st
import pandas as pd
import datetime

from xxx.input import get_xxx_metrics

def graph_visual_data():
    data = get_xxx_metrics('audiobook')
    data = data[data.name.isin(['audiobook_processed', 'n_unknown_errors', 'n_known_errors'])][['date','value','name']]

    data.date = data.date.dt.date
    data.value = data.value.astype(int)

    data = data.groupby(['date','name'], as_index=False).sum()

    fig = (alt.Chart(data).transform_fold(
    fold=['Audiobooks processed', 'Known Errors','Unknown Errors'], 
    as_=['name', 'value']).mark_bar(size=15).encode(
        x=alt.X('date:T', axis=alt.Axis(format='%b %-d'), scale=alt.Scale(padding=15), title='Dates processed on'),
        y=alt.Y('value', title='Total amount'),
        color=alt.Color('name', title='Audiobooks processed and errors', sort=['audiobook_processed']),
        tooltip=['name', 'value', 'date']).properties(width=500))
    st.altair_chart(fig)

您可以通过在构建图表之前替换 pandas 数据框中的值来做到这一点:

data['name'] = data['name'].replace({
    'audiobook_processed': 'Audiobook processed',
    'n_unknown_errors': 'Unknown Errors',
    'n_known_errors': 'Known Errors',
})

然后跳过transform_fold,因为这里不适用。