每行 Altair 热图独立颜色图计算
Altair heatmap independent color map calculation per row
我正在尝试使用 altair 绘制热图。这个想法是颜色映射独立应用于每一行,而不是跨所有观察。不幸的是,这就是我目前得到的结果。
正如您在图表上看到的,您只能看到一行中的变化,因为这是案例较多的一行。但是,我们的想法是为每一行应用映射,而不是一起应用映射。
这是我目前的代码:
data = pd.read_csv(
"https://raw.githubusercontent.com/jlcoto/covid-peru-data/master"
"/data/limpia/data_limpia_datos_siscovid_2020_05_26.csv",
parse_dates=["fecha_resultado"],
dtype={"ubigeo": "string"},
)
evol_departamento = (
data.groupby(
["departamento", pd.Grouper(key="fecha_resultado", freq="D")]
)[["uuid"]]
.count()
.rename(columns={"uuid": "num_casos"})
.reset_index()
)
alt.Chart(evol_departamento).mark_rect().encode(
x="monthdate(fecha_resultado)",
y="departamento:O",
color=alt.Color("num_casos:Q"),
).resolve_scale(color="independent",)
我看到这个 reply 关于使用 resolve_scale
,但是它似乎没有用。
resolve
功能仅适用于多面板图表(facet、concat、repeat、layer 等)要在单个图表的编码内调整色标,最好的方法是使用altair transforms 计算数据的规范化版本。
这是您的数据集的示例:
alt.Chart(evol_departamento).transform_joinaggregate(
max_casos='max(num_casos)',
groupby=['departamento']
).transform_calculate(
num_casos_norm='datum.num_casos / datum.max_casos'
).mark_rect().encode(
x="monthdate(fecha_resultado)",
y="departamento:O",
color=alt.Color("num_casos_norm:Q"),
)
我正在考虑对案例使用不透明的行分面,对部门使用颜色。虽然不透明度缺乏一点对比度。
chart2 = alt.Chart(evol_departamento).mark_rect().encode(
x="monthdate(fecha_resultado)",
color=alt.Color("departamento:N", legend=None),
opacity = alt.Opacity("num_casos:Q", legend=None)
).properties(
width=800, height=12
).facet(row='departamento:N'
).configure_facet(
spacing= 0
).configure_view(
stroke=None
).resolve_scale(
opacity='independent'
)
chart2
我没有立即发现如何使用 labelAngle 旋转标签。
chart
我正在尝试使用 altair 绘制热图。这个想法是颜色映射独立应用于每一行,而不是跨所有观察。不幸的是,这就是我目前得到的结果。
正如您在图表上看到的,您只能看到一行中的变化,因为这是案例较多的一行。但是,我们的想法是为每一行应用映射,而不是一起应用映射。
这是我目前的代码:
data = pd.read_csv(
"https://raw.githubusercontent.com/jlcoto/covid-peru-data/master"
"/data/limpia/data_limpia_datos_siscovid_2020_05_26.csv",
parse_dates=["fecha_resultado"],
dtype={"ubigeo": "string"},
)
evol_departamento = (
data.groupby(
["departamento", pd.Grouper(key="fecha_resultado", freq="D")]
)[["uuid"]]
.count()
.rename(columns={"uuid": "num_casos"})
.reset_index()
)
alt.Chart(evol_departamento).mark_rect().encode(
x="monthdate(fecha_resultado)",
y="departamento:O",
color=alt.Color("num_casos:Q"),
).resolve_scale(color="independent",)
我看到这个 reply 关于使用 resolve_scale
,但是它似乎没有用。
resolve
功能仅适用于多面板图表(facet、concat、repeat、layer 等)要在单个图表的编码内调整色标,最好的方法是使用altair transforms 计算数据的规范化版本。
这是您的数据集的示例:
alt.Chart(evol_departamento).transform_joinaggregate(
max_casos='max(num_casos)',
groupby=['departamento']
).transform_calculate(
num_casos_norm='datum.num_casos / datum.max_casos'
).mark_rect().encode(
x="monthdate(fecha_resultado)",
y="departamento:O",
color=alt.Color("num_casos_norm:Q"),
)
我正在考虑对案例使用不透明的行分面,对部门使用颜色。虽然不透明度缺乏一点对比度。
chart2 = alt.Chart(evol_departamento).mark_rect().encode(
x="monthdate(fecha_resultado)",
color=alt.Color("departamento:N", legend=None),
opacity = alt.Opacity("num_casos:Q", legend=None)
).properties(
width=800, height=12
).facet(row='departamento:N'
).configure_facet(
spacing= 0
).configure_view(
stroke=None
).resolve_scale(
opacity='independent'
)
chart2
我没有立即发现如何使用 labelAngle 旋转标签。
chart