【问题标题】:Format labels on bar charts in Altair在 Altair 中设置条形图上的标签格式
【发布时间】:2020-01-21 12:23:16
【问题描述】:

[![图表显示没有正确格式的数字][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

我的直觉是,在将其添加到图表之前,我必须以某种方式调用并格式化该值,但我无法从文档或示例中看到如何执行此操作。

【问题讨论】:

    标签: altair vega-lite


    【解决方案1】:

    您需要将格式包装在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)
    

    【讨论】:

      猜你喜欢
      • 2020-08-22
      • 1970-01-01
      • 1970-01-01
      • 2017-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-05
      相关资源
      最近更新 更多