我使用Altair绘制了一个热图,其中包括一个色条,但是热图中缺少的数据(空白/白色)未在色条上标记。有没有办法在图例上添加单独的标签(例如,在颜色栏下方),以显示图表中缺失数据的表示方式?
我想出了一个解决方案,该解决方案在我的图表顶部包括一个“鬼”层-一个尺子图表,其大小= 0(使该行不可见),并用填充有字符串值的列着色“无数据”(请参见下面的代码)。这会强制使用图例,但我想知道是否有更好的方法。 (请参见以下链接,查看我的完整示例:heatmap plot)
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
“鬼魂层”在颜色栏的底部添加了一个标有“无数据”的空方块,但我希望有一种更好的方法来表示这一点!
答案 0 :(得分:2)
不幸的是,我不知道一种在定量范围内处理空值的简便方法。但是您可以在标称范围内自然地处理它们。我可能会使用计算转换在图表规范中生成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