Altair分层条形图中带有错误条的排序丢失

时间:2020-03-07 13:15:05

标签: python altair

我正在为条形图使用自定义排序,并且效果很好。但是,当我要向其中添加错误栏并使用分层图表时,则不再考虑排序。我还定义了displayData = async () =>{ try { let token = await AsyncStorage.getItem('token'); alert(token); } catch(error){ alert(error); } } ,这也没有考虑在内。

以下是数据示例:

axis = None

仅使用条形图即可

df = pd.DataFrame(
    {'size' : ['huge', 'huge', 'huge', 'huge', 'huge', 'huge', 'big', 'big', 'big',  'big', 'big', 'big', 'small', 'small', 'small', 'small', 'small', 'small'],
     'weight': ['10 mg', '10 mg', '10 g', '10 g', '10 kg', '10 kg', '10 mg', '10 mg', '10 g', '10 g', '10 kg', '10 kg','10 mg', '10 mg', '10 g', '10 g', '10 kg', '10 kg'],
     'value': [3.5,2.6,5.1,6.5,2.3,4.6,7.1,2.8,6.9,1.5,2.6,2.8,6.9,2.3,4.6,3.5,2.6,5.1]
    }
)

enter image description here

但不再显示错误栏:

alt.Chart(df).mark_bar().encode(
    x = alt.X('weight:O', title=None, axis=None, sort=['10 kg', '10 g', '10 mg']),
    y = alt.Y('mean(value)', title='Value'),
    color = alt.Color('weight:O', sort=['10 kg', '10 g', '10 mg']),
    column = alt.Column('size', sort=['huge', 'big', 'small'])
)

enter image description here

在两个图中,error_bars = alt.Chart().mark_errorbar(extent='ci').encode( x=alt.X('weight:O', sort=['10 kg', '10 g', '10 mg']), y='value:Q' ) bars = alt.Chart().mark_bar().encode( x = alt.X('weight:O', title=None, axis=None, sort=['10 kg', '10 g', '10 mg']), y = alt.Y('mean(value)', title='Value'), color = alt.Color('weight:O', sort=['10 kg', '10 g', '10 mg']) ) alt.layer(bars, error_bars, data=df).facet( column = alt.Column('size', sort=['huge', 'big', 'small']) ) axis均已设置为title,但未在分层图表中予以考虑。奇怪的是,排序是考虑到图例(请参见None),而不是x轴(在每个尺寸内)。

是否可以解决此问题?还是我没有正确使用分层图表?

1 个答案:

答案 0 :(得分:1)

要隐藏分层图表中的轴,应在两层中分别设置axis=Nonetitle=None

error_bars = alt.Chart().mark_errorbar(extent='ci').encode(
    x=alt.X('weight:O',  title=None, axis=None, sort=['10 kg', '10 g', '10 mg']),
    y='value:Q'
)

bars = alt.Chart().mark_bar().encode(
    x = alt.X('weight:O', title=None, axis=None, sort=['10 kg', '10 g', '10 mg']),
    y = alt.Y('mean(value)', title='Value'),
    color = alt.Color('weight:O', sort=['10 kg', '10 g', '10 mg'])
)

alt.layer(bars, error_bars, data=df).facet(
    column = alt.Column('size', sort=['huge', 'big', 'small'])
)

enter image description here

您会注意到我的图表版本具有正确的排序顺序:这是因为我使用的是Altair 4.0版。较早版本的Altair / Vega-Lite中有一个bug,无法在分层图表中正确显示排序。

更新到Altair 4.0或更高版本,您的排序将起作用。