Altair:不对轴进行排序

7

这里是一些简单示例代码,展示了我想要解决的问题:

import pandas as pd
import altair as alt

categoryNames    = [ 'a', 'f', 'r', 'u', 'p' ]
categories       = pd.Series( categoryNames )
categories.index = categoryNames

amountsRaw       = [ 50, -100, 75, 100, -500 ]
amounts          = pd.Series( amountsRaw )
amounts.index    = categoryNames

df = pd.DataFrame( { "Amounts" : amounts, "Categories" : categories } )

alt.Chart( df ).mark_bar().encode(
    x='Categories',
    y='Amounts',
    color = alt.condition( alt.datum.Amounts > 0, alt.value( 'green' ), alt.value( 'red' ) )
)

这将生成一个条形图,但我不希望 x 轴类别被排序。它们需要按照 categoryNames 数组中的顺序出现。我该如何做到这一点?
1个回答

11
你可以将列表传递给alt.X编码的sort属性,以控制类别的顺序。例如:
alt.Chart(df).mark_bar().encode(
    x=alt.X('Categories', sort=categoryNames),
    y='Amounts',
    color=alt.condition(alt.datum.Amounts > 0, alt.value('green'), alt.value('red'))
)

这里输入图片描述


这实际上非常好用,除了当我尝试在“带标签的简单条形图”示例中使用它时,坐标轴会重新排序。https://altair-viz.github.io/gallery/bar_chart_with_labels.html - Flipper
1
这是 Vega-Lite 中已知的一个 bug:请参见 https://github.com/vega/vega-lite/issues/2177 和 https://github.com/altair-viz/altair/issues/820。 - jakevdp
啊,太好了,发现得真及时。看起来解决方案正在慢慢地推进中。谢谢! - Flipper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接