我有以下图表-
![enter image description here](https://istack.dev59.com/RRhNb.webp)
我希望能够对列进行排序(不是单个组的各个条形图 - 我已经知道如何做到这一点),也就是说,基于所选类别(
我尝试使用
![enter image description here](https://istack.dev59.com/RRhNb.webp)
我希望能够对列进行排序(不是单个组的各个条形图 - 我已经知道如何做到这一点),也就是说,基于所选类别(
a
,b
或c
)的值来排序3个子图表-如果您愿意。我尝试使用
alt.SortField
和alt.EncodeSortField
,它们会移动图表,但如果更改类别以查看它们是否实际工作,则无法正常工作。
代码 -import altair as alt
import pandas as pd
dummy = pd.DataFrame({'place':['Asia', 'Antarctica','Africa', 'Antarctica', 'Asia', 'Africa', 'Africa','Antarctica', 'Asia'],'category':['a','a','a','b','b','b','c','c','c'],'value':[5,2,3,4,3,5,6,9,5]})
alt.Chart(dummy).mark_bar().encode(
x=alt.X('category'),
y='value',
column=alt.Column('place:N', sort=alt.SortField(field='value', order='descending')),
color='category',
)
我知道alt.Column('place:N', sort=alt.SortField(field='value', order='descending'))
似乎不正确,因为我没有对任何类别进行定位,所以我也尝试了x=alt.X('category', sort=alt.SortField(field='c', order='descending'))
,但它也不起作用。
期望的输出(假设按降序排列)-
- 如果我要按'c'排序,则中间列应该首先出现,然后是左边和最后是右边的列。
- 它似乎已经按'b'排序了。
- 如果我要按'a'排序,则右边的列应该首先出现,然后是左边和最后是中间的列。
alt.SortField("sort_val")
改为alt.EncodingSortField("sort_val", op="max")
,那么它将按匹配值的最大值进行排序。 - jakevdpalt.EncodingSortField("sort_val", op="max")
之外,我还必须使用place
和day
两者进行groupby,即sort_key="argmax(key)", groupby=['place', 'day']
,然后它就起作用了。非常感谢您的帮助!! - jar