在 Altair 中为条形图设置标签格式
Format labels on bar charts in Altair
[![显示格式不正确的数字的图表][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')
)
但是这个 returns 以下架构验证错误:
SchemaValidationError: Invalid specification
altair.vegalite.v3.api.Chart, validating 'required'
'data' is a required property
我的直觉是,在将值添加到图表之前,我必须以某种方式调用值并设置其格式,但我无法从文档或示例中看到如何执行此操作。
您需要将格式包装在 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)
[![显示格式不正确的数字的图表][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')
)
但是这个 returns 以下架构验证错误:
SchemaValidationError: Invalid specification
altair.vegalite.v3.api.Chart, validating 'required'
'data' is a required property
我的直觉是,在将值添加到图表之前,我必须以某种方式调用值并设置其格式,但我无法从文档或示例中看到如何执行此操作。
您需要将格式包装在 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)