Формат меток на гистограммах в Альтаире - PullRequest
0 голосов
/ 20 сентября 2019

[! [Диаграмма, показывающая числа без правильного форматирования] [1]] [1]

Мне нужно отформатировать метку на этих столбцах так, чтобы они были округлены до ближайшего целого числа.У меня есть следующий код:

def chart_tender_response_times(dataframe=None):

        chart = (
            alt.Chart(dataframe, title="Median time to respond to a tender")
                .mark_bar()
                .encode(
                alt.X("year(date):O"
                ),
                alt.Y("mean(median_duration):Q",
                     ## This is our units section, only describe the units of measurement here.
                     axis=alt.Axis(title="Unit: days.")
                ),
                alt.Tooltip(["mean(median_duration):Q"], format=",.2r", title="Days to respond to a tender")
            )
        )

        text = (
            chart.mark_text(align="center", baseline="bottom")
            .encode(text='mean(median_duration):Q')
        )

        return chart+text

Я пробовал варианты следующих ...

text = (
            chart.mark_text(align="center", baseline="bottom")
            .encode(text='mean(median_duration):Q', format='.,2r')
        )

, но это возвращает следующую ошибку проверки схемы:

SchemaValidationError: Invalid specification

altair.vegalite.v3.api.Chart, validating 'required'

'data' is a required property

Я догадываюсь, что мне нужно как-то вызвать и отформатировать значение, прежде чем добавить его в диаграмму, но я не могу понять, как это сделать, из документации или примеров.

1 Ответ

1 голос
/ 20 сентября 2019

Вам нужно обернуть формат в alt.Text, как в encode(text=alt.Text('mean(median_duration):Q', format=',.2r'))

Кроме того, я думаю, format=',.0f' более надежно округлить до ближайшего целого числа (например, если у вас 256,4, это будетокругляется до 256, тогда как с format=',.2r' вы получите 260)

Ниже приведен пример с функцией, немного измененной для соответствия другому набору данных (поскольку вы ее не предоставили):

import altair as alt
from vega_datasets import data

cars = data("cars")

def chart_tender_response_times(dataframe=None):
    chart = (
        alt.Chart(dataframe, title="Median time to respond to a tender")
        .mark_bar()
        .encode(
            alt.X("year(Year):O"),
            alt.Y(
                "mean(Displacement):Q",
                ## This is our units section, only describe the units of measurement here.
                axis=alt.Axis(title="Unit: days."),
            ),
            alt.Tooltip(
                ["mean(Displacement):Q"],
                format=",.0f",
                title="Days to respond to a tender",
            ),
        )
    )

    text = chart.mark_text(align="center", baseline="bottom").encode(
        text=alt.Text("mean(Displacement):Q", format=",.0f")
    )

    return chart + text

chart_tender_response_times(cars)

enter image description here

...