Altair 中的多指标热图

Multi-index Heatmap in Altair

有没有办法绘制在 y 轴上具有多索引的热图?如下所示,但在一个 4x4 网格中而不是两个方面:

import altair as alt
import pandas as pd

source = pd.DataFrame({
    '1st_index': (0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1),
    'x': list(range(4))*4,
    '2nd_index': (0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1),
    'z': range(16)})
alt.Chart(source).mark_rect().encode(
    x='x:O',
    y='2nd_index:O',
    color='z:Q',
    row='1st_index:O'
).configure_scale(
    bandPaddingInner=0.1
)

无法直接使用 y 编码创建多索引热图,但您可以通过两种方法来实现。

一种可能是调整分面配置,使分面显示为一个图表。例如:

alt.Chart(source).mark_rect().encode(
    x='x:O',
    y=alt.Y('2nd_index:O', title=None),
    color='z:Q',
    row=alt.Row('1st_index:O', title=None),
).configure_scale(
    bandPaddingInner=0.1
).configure_facet(
    spacing=0
)

或者,您可以使用计算转换来组合字段并绘制它:

alt.Chart(source).transform_calculate(
    index = '(' + alt.datum['1st_index'] + "," + alt.datum['2nd_index'] + ')'
).mark_rect().encode(
    x='x:O',
    y='index:N',
    color='z:Q',
).configure_scale(
    bandPaddingInner=0.1
)