在Altair中,对于排序字段进行排序后,如果尝试手动设置原始颜色值(例如在条形图中,为每个条形设置不同的颜色),则会破坏排序的顺序。这是因为在设置颜色之后 Altair 会按颜色值对数据进行重新排序,而不是按原始排序字段。这可能会导致图表无法正确表示数据。
要解决这个问题,可以使用一下方法:
import altair as alt
from vega_datasets import data
source = data.cars()
alt.Chart(source).mark_point().encode(
x='Horsepower',
y='Miles_per_Gallon',
color=alt.Color('Origin', scale=alt.Scale(scheme='category20')),
tooltip=['Name', 'Origin', 'Horsepower', 'Miles_per_Gallon']
).properties(
title='Cars'
).interactive()
import altair as alt
from vega_datasets import data
source = data.cars()
# create new dataset with both sort field and color field
df = source[['Horsepower', 'Miles_per_Gallon', 'Origin', 'Name']] \
.sort_values('Horsepower') \
.reset_index(drop=True) \
.reset_index()
df['color'] = alt.Color('Origin', scale=alt.Scale(scheme='category20'))
# use new dataset to generate chart
alt.Chart(df).mark_point().encode(
x='Horsepower',
y='Miles_per_Gallon',
color=alt.Color('color:N', legend=None),
tooltip=['Name', 'Origin', 'Horsepower', 'Miles_per_Gallon']
).properties(
title='Cars'
).interactive()
这两种方法都可以有效地解决'设置原始颜色值会破坏SortField排序字段”这个问题。