具有自定义排序功能的 Altair 堆叠区域
Altair stacked area with custom sorting
如何为堆叠面积图的排序指定自定义顺序(即字符串列表)?
我想在图表上按 ['B'、'A'、'C'] 从低到高的顺序对区域进行排序,而不考虑值。我查看了 alt.Order 的文档,但这似乎是基于聚合,而不是固定的自定义顺序。
import altair as alt
import pandas as pd
df = pd.DataFrame(
{'A': range(0,10),
'B': range(0,20,2),
'C': range(0,30,3)
},
)
df['date'] = range(0,10)
df = df.melt(id_vars='date')
chart = alt.Chart(df).mark_area().encode(
x="date",
y=alt.Y("value:Q", stack='zero'),
color="variable",
)
display(chart)
您可以使用 order
通道和计算所需顺序的转换来执行此操作。调整图例的 sort
属性 使其与堆栈顺序匹配也很有帮助:
alt.Chart(df).transform_calculate(
order="{'B':0, 'A': 1, 'C': 2}[datum.variable]"
).mark_area().encode(
x="date",
y=alt.Y("value:Q", stack='zero'),
color=alt.Color("variable", sort=alt.SortField("order", "descending")),
order="order:O"
)
如何为堆叠面积图的排序指定自定义顺序(即字符串列表)?
我想在图表上按 ['B'、'A'、'C'] 从低到高的顺序对区域进行排序,而不考虑值。我查看了 alt.Order 的文档,但这似乎是基于聚合,而不是固定的自定义顺序。
import altair as alt
import pandas as pd
df = pd.DataFrame(
{'A': range(0,10),
'B': range(0,20,2),
'C': range(0,30,3)
},
)
df['date'] = range(0,10)
df = df.melt(id_vars='date')
chart = alt.Chart(df).mark_area().encode(
x="date",
y=alt.Y("value:Q", stack='zero'),
color="variable",
)
display(chart)
您可以使用 order
通道和计算所需顺序的转换来执行此操作。调整图例的 sort
属性 使其与堆栈顺序匹配也很有帮助:
alt.Chart(df).transform_calculate(
order="{'B':0, 'A': 1, 'C': 2}[datum.variable]"
).mark_area().encode(
x="date",
y=alt.Y("value:Q", stack='zero'),
color=alt.Color("variable", sort=alt.SortField("order", "descending")),
order="order:O"
)