如何显式设置mark_rect的y范围(热图)

时间:2020-05-12 14:08:04

标签: altair

我正在使用groupby(['Month','Year']

的输出来绘制许多站点的热图。

没有值的单元格(月/年)显示为空白-很好。

“问题”是我希望始终显示全年的数据(1月至12月)。但是,对于在一年的开始或结束月份没有任何数据的数据集,在绘制数据时未显示网格的那些部分。当显示较少的月份时,这也会更改单元格的大小。

也就是说,我希望每个地块都具有以下相同的结构:

enter image description here

而不是减少为这样:

enter image description here

为了保持一致性,我希望每个图的网格都保持相同(1-12个月),即使它在顶部(年初)或底部(年底)留有空白。 >

我尝试设置mark_rect描述中列出的'y'和'y2'参数,以强制其始终显示1到12之间的y范围,但没有效果。

1 个答案:

答案 0 :(得分:2)

您可以指定比例域,包括要显示的值(1到12个月):

import pandas as pd
import numpy as np
import altair as alt

np.random.seed(0)
df = pd.DataFrame({
    'date': pd.date_range('2010-01-01', periods=120, freq='M'),
    'value': np.random.rand(120),
})
df = df[(df.value > 0.3) & (df.date.dt.month < 8)]

alt.Chart(df).mark_rect().encode(
    x='year(date):O',
    y=alt.Y('month(date):O', scale=alt.Scale(domain=list(range(1, 13)))),
    color='value:Q'
)

enter image description here

请注意,您必须使用Vega-Lite 4.9或更高版本进行查看,因为早期的vega-lite版本中存在一个错误,无法正确显示值。如果您使用的是Jupyter笔记本,请单击右上角的(⋯)菜单,然后选择在Vega Editor中打开