TimeUnit#
TimeUnit 转换用于在 Altair 中离散化日期和时间。与上面讨论的Aggregate和Bin一样,它们既可以定义为编码的一部分,也可以定义为顶层转换。
以下是可用的时间单位
"year","yearquarter","yearquartermonth","yearmonth","yearmonthdate","yearmonthdatehours","yearmonthdatehoursminutes","yearmonthdatehoursminutesseconds"。"quarter","quartermonth""month","monthdate""date"(月份中的日期,即 1 - 31)"day"(星期几,即 周一 - 周五)"hours","hoursminutes","hoursminutesseconds""minutes","minutesseconds""seconds","secondsmilliseconds"毫秒
编码中的 TimeUnit#
任何时间字段定义都可以包含 timeUnit 参数来离散化时间数据。
例如,这里我们绘制了 2010 年西雅图每小时温度测量值组成的数据集
import altair as alt
from vega_datasets import data
temps = data.seattle_temps.url
alt.Chart(temps).mark_line().encode(
x='date:T',
y='temp:Q'
)
由于大量数据点挤压在短时间内,图表过于密集;我们可以通过离散化使其更清晰一些,例如按月离散化并仅绘制月平均温度
alt.Chart(temps).mark_line().encode(
x='month(date):T',
y='mean(temp):Q'
)
注意,默认情况下 timeUnit 输出是一个连续量;如果您希望它是一个分类量,您可以指定有序 (O) 或名义 (N) 类型。这在绘制条形图或其他离散图表类型时非常有用
alt.Chart(temps).mark_bar().encode(
x='month(date):O',
y='mean(temp):Q'
)
可以在单个图表中组合多个时间单位,以产生有趣的数据视图;例如,这里我们提取月份和日期,以展示西雅图全年温度的概况
alt.Chart(temps).mark_rect().encode(
alt.X('date(date):O').title('day'),
alt.Y('month(date):O').title('month'),
color='max(temp):Q'
).properties(
title="2010 Daily High Temperatures in Seattle (F)"
)
作为转换的 TimeUnit#
有时将 timeUnit 指定为顶层转换很方便,尤其是在该值可能被重用的情况下。使用 Chart.transform_timeunit() 方法可以最方便地完成此操作。例如
alt.Chart(temps).mark_line().encode(
alt.X('month:T').axis(format='%b'),
y='mean(temp):Q'
).transform_timeunit(
month='month(date)'
)
请注意,因为 timeUnit 在此处不属于编码通道的一部分,通常需要添加轴格式化器以确保轴标签合适。
转换选项#
transform_timeunit() 方法基于 TimeUnitTransform 类构建,该类具有以下选项
点击显示表格
属性 |
类型 |
描述 |
|---|---|---|
as |
写入 timeUnit 值的输出字段。 |
|
field |
应用时间单位的数据字段。 |
|
timeUnit |
anyOf( |
时间单位。 |