您可以为 Altair 图表的图例添加“缺失数据”标签吗?

Car*_*ari 3 python legend altair

我有一个使用 Altair 绘制的热图,其中包含一个颜色条,但热图中缺失的数据(空白/白色)未在颜色条上标记。有没有办法向图例添加单独的标签(例如在颜色栏下方)以显示图表中缺失数据的表示方式?

我想出了一个解决方案,它在我的图表顶部包含一个“幽灵”层——一个大小为 0 的标尺图表(这样这条线是不可见的),它由填充有“否”的字符串值的列着色数据”(见下面的代码)。这会强制一个传奇项目,但我想知道是否有更好的方法。(在此处的链接中查看我的完整示例:热图图

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

# Example heatmap data
heatmap_df = pd.DataFrame([["NY",1999,1],["NY",2000,np.nan], ["MA",1999,np.nan], ["MA",2000,4]], columns = ["state","year","rate"])

# Example Legend dataframe
legend_no_data = pd.DataFrame([[1999, "No Data"]], columns = ["year", "text"])


# Example chart with "No Data" label
heatmap = alt.Chart(heatmap_df).mark_rect().encode(alt.X("year:O"), alt.Y("state:N"), alt.Color("rate:Q"))

# Chart for "No Data" legend item
vacc_legend_no_data = alt.Chart(legend_no_data).mark_line(
    size=0
).encode(
    x='year:O',
    color = alt.Color("text:N", legend = alt.Legend(title = "", symbolType = "square")))

heatmap + vacc_legend_no_data
Run Code Online (Sandbox Code Playgroud)

“幽灵层”在颜色条底部添加了标有“无数据”的空方块,但我希望有更好的方法来表示这一点!

jak*_*vdp 6

不幸的是,我不知道在定量范围内处理空值的简单方法。但是你可以在名义范围内自然地处理它们;我可能会使用计算转换在图表规范中生成 Null 数据集层,以避免构建第二个数据帧。它可能看起来像这样:

heatmap = alt.Chart(heatmap_df).mark_rect().encode(
  alt.X("year:O"),
  alt.Y("state:N"),
  alt.Color("rate:Q")
)

nulls = heatmap.transform_filter(
  "!isValid(datum.rate)"
).mark_rect(opacity=0.5).encode(
  alt.Color('rate:N', scale=alt.Scale(scheme='greys'))
)

heatmap + nulls
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明