您可以将 "missing data" 的标签添加到 Altair 图表的图例中吗?
Can you add a label for "missing data" to a legend for an Altair chart?
我有一个使用 Altair 绘制的热图,其中包含一个颜色条,但热图中缺失的数据 (blank/white) 未标记在颜色条上。有没有办法在图例中添加单独的标签(例如在颜色条下方)以显示缺失数据在图表中的表示方式?
我想出了一个解决方案,在我的图表顶部包含一个 "ghost" 层 -- 一个大小为 0 的标尺图表(这样线条是不可见的),由一列着色填充 "No Data" 的字符串值(见下面的代码)。这会强制使用传奇物品,但我想知道是否有更好的方法。
(在 link 此处查看我的完整示例: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
"ghost layer" 在颜色栏底部添加了标记为 "No Data" 的空方块,但我希望有更好的方式来表示它!
不幸的是,我不知道在定量范围内处理空值的简单方法。但是您可以在标称范围内自然地处理它们;我可能会使用计算转换在图表规范中生成 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
我有一个使用 Altair 绘制的热图,其中包含一个颜色条,但热图中缺失的数据 (blank/white) 未标记在颜色条上。有没有办法在图例中添加单独的标签(例如在颜色条下方)以显示缺失数据在图表中的表示方式?
我想出了一个解决方案,在我的图表顶部包含一个 "ghost" 层 -- 一个大小为 0 的标尺图表(这样线条是不可见的),由一列着色填充 "No Data" 的字符串值(见下面的代码)。这会强制使用传奇物品,但我想知道是否有更好的方法。 (在 link 此处查看我的完整示例: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
"ghost layer" 在颜色栏底部添加了标记为 "No Data" 的空方块,但我希望有更好的方式来表示它!
不幸的是,我不知道在定量范围内处理空值的简单方法。但是您可以在标称范围内自然地处理它们;我可能会使用计算转换在图表规范中生成 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