fug*_*ede 5 python data-visualization time-series vega-lite altair
我试图在 Altair 中创建时间范围跨越几天的时间序列图的 Vega-Lite 规范。由于在我的情况下,很清楚哪一天是哪一天,我想通过让标签的形式为 来减少轴标签中的噪音'%H:%M',即使这会导致标签不明显。
这是一些示例数据;我的实际数据有五分钟的分辨率,但我想这在这里不会太重要:
import altair as alt
import numpy as np
import pandas as pd
# Create data spanning 30 hours, or just over one full day
df = pd.DataFrame({'time': pd.date_range('2018-01-01', periods=30, freq='H'),
'data': np.arange(30)**.5})
Run Code Online (Sandbox Code Playgroud)
通过使用其他微不足道的yearmonthdatehoursminutes变换,我得到以下信息:
alt.Chart(df).mark_line().encode(x='yearmonthdatehoursminutes(time):T',
y='data:Q')
Run Code Online (Sandbox Code Playgroud)
现在,我的目标是去掉水平轴标签中的日期,让它们变成类似['00:00', '03:00', ..., '21:00', '00:00', '03:00'],或者任何间距效果最好的东西。
仅用hoursminutes作转换的幼稚方法是行不通的,因为它会存储实际数据:
alt.Chart(df).mark_line().encode(x='hoursminutes(time):T', y='data:Q')
Run Code Online (Sandbox Code Playgroud)
那么,有没有一种声明式的方式来做到这一点?最终,可视化将利用选择来定义水平轴限制,因此明确使用指定标签Axis似乎并不吸引人。
为了扩展 @fuglede 的答案,Altair 中的日期和时间有两个不同的概念。
时间格式允许您指定时间在轴上的显示方式;它们看起来像这样:
chart.encode(
x=alt.X('time:T', axis=alt.Axis(format='%H:%M'))
)
Run Code Online (Sandbox Code Playgroud)
Altair 使用d3-time-format中的格式代码。
时间单位允许您指定数据的分组方式,并且它们还可以调整默认时间格式以进行匹配。它们看起来像这样:
chart.encode(
x=alt.X('time:T', timeUnit='hoursminutes')
)
Run Code Online (Sandbox Code Playgroud)
或通过简写:
chart.encode(
x='hoursminutes(time):T'
)
Run Code Online (Sandbox Code Playgroud)
此处列出了可用的时间单位。
如果您只想调整轴格式,请使用时间格式。如果您想根据时间跨度进行分组(即按年、按月、按小时等对数据进行分组),请使用时间单位。Altair 文档中提供了此类示例,例如Altair 示例库中的西雅图天气热图。
| 归档时间: |
|
| 查看次数: |
1272 次 |
| 最近记录: |