python - 小时和分钟作为跨度超过一天的 Altair 图中的标签

标签 python time-series data-visualization 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})

通过使用其他微不足道的 yearmonthdatehoursminutes转换,我得到以下信息:
alt.Chart(df).mark_line().encode(x='yearmonthdatehoursminutes(time):T', 
y='data:Q')

enter image description here

现在,我的目标是去掉水平轴标签中的日期,使它们变成类似 ['00:00', '03:00', ..., '21:00', '00:00', '03:00'] 的东西。 ,或任何间距效果最佳。

仅使用 hoursminutes 的幼稚方法因为转换不起作用,因为它会存储实际数据:
alt.Chart(df).mark_line().encode(x='hoursminutes(time):T', y='data:Q')

enter image description here

那么,有没有一种声明式的方式来做到这一点?最终,可视化将利用选择来定义水平轴范围,因此使用 Axis 明确指定标签。似乎没有吸引力。

最佳答案

为了扩展@fuglede 的回答,Altair 中有两个不同的日期和时间概念。

时间格式 让您指定时间在轴上的显示方式;它们看起来像这样:

chart.encode(
    x=alt.X('time:T', axis=alt.Axis(format='%H:%M'))
)

Altair 使用来自 d3-time-format 的格式代码.

时间单位 让您指定数据的分组方式,并且它们还会调整默认时间格式以匹配。它们看起来像这样:
chart.encode(
    x=alt.X('time:T', timeUnit='hoursminutes')
)

或通过速记:
chart.encode(
    x='hoursminutes(time):T'
)

列出可用的时间单位 here .

如果只想调整轴格式,请使用时间格式。如果要基于时间跨度进行分组(即按年、月、小时等对数据进行分组),请使用时间单位。这方面的示例出现在 Altair 文档中,例如Seattle Weather Heatmap在 Altair 的示例库中。

关于python - 小时和分钟作为跨度超过一天的 Altair 图中的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60351135/

相关文章:

python 位数组到文件和从文件

python - VS Code Code Runner 不适用于 virtualenvs

machine-learning - 用于预测某些事件何时发生的机器学习模型

python - Altair choropleth map ,基于折线图选择的颜色突出显示

r - 使用网络堆积条形图可视化 Likert 响应 : how to compare between groups?

javascript - 如何在客户端使用 angularjs 并在后端使用 flask 开发 Web 应用程序?

python - 如何在 Python 中查看文件是否超过 3 个月?

r - ARIMA 拟合值

R函数返回时间序列ts()对象的开始和结束日期?

r - R 中系数的可视化(点图)