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
)
有没有办法绘制在 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
)