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)
“幽灵层”在颜色条底部添加了标有“无数据”的空方块,但我希望有更好的方法来表示这一点!
不幸的是,我不知道在定量范围内处理空值的简单方法。但是你可以在名义范围内自然地处理它们;我可能会使用计算转换在图表规范中生成 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)
归档时间: |
|
查看次数: |
546 次 |
最近记录: |