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

标签 altair

我正在使用 groupby(['Month','Year'] 的输出绘制许多网站的热图

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

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

也就是说,我希望每个图具有相同的结构:

enter image description here

而不是简化为这样的内容:

enter image description here

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

我尝试设置 mark_rect 描述中列出的“y”和“y2”参数,以强制它始终显示 1-12 的 y 范围,但没有效果。

最佳答案

您可以指定一个刻度域,包括要显示的值(从 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 Notebook,请点击右上角的(⋯) 菜单,然后选择在 Vega 编辑器中打开

关于altair - 如何显式设置 mark_rect 的 y 范围(热图),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61753877/

相关文章:

python - 处理 python Altair 工具提示文本中的 "null"值

python - 在 Altair 中保留上一层的工具提示

python-3.x - 使用 Altair 工具提示和 mark_text 显示图形和名称

python - 更改 Altair 折线图和面积图中的步长宽度

bar-chart - Altair - 将刻度线与条形图中的条形中心对齐

python - 当 x 轴包含重复项时,altair/vega-lite 中的 mark_line 会对数据重新排序

Python Altair 如何在不更改轴刻度的情况下对直方图数据进行分箱

python - Altair:当类别多于可用颜色时如何着色

python - 如何在 python 中使用 altair 包加载和绘制 csv 文件?

tooltip - 格式化 Altair 等值线图图例比例和工具提示