在Altair的分层图表中保持特定的Y轴顺序/排序

3

我想在这里Altair文档所示的Trellis Plot基础上进行改进:https://altair-viz.github.io/gallery/beckers_barley_trellis_plot.html

在下面的代码中,我正在创建具有特定Y轴排序的“mark_rule”图表,并将其与“mark_point”叠加以突出终点。但是,当我将“mark_point”图层添加到“mark_rule”之上时,Y轴排序/顺序就会丢失;我无法重新对分层图表的Y轴进行排序/重新排序。请参见下面的“mark_rule”图,它具有适当的Y轴排序,“mark_rule + park_point”图表,在分层后Y轴排序丢失。我想知道如何在分层后恢复Y轴排序。添加最终的编码以进行Y轴排序似乎没有帮助。

combined = alt.layer(rule, point_a, point_b).encode(alt.Y('key:N', axis=alt.Axis(title='', grid=True),sort=alt.EncodingSortField(field='item_b', op='max', order='descending')))

以下是附加图像的可重现代码:
df = pd.DataFrame(
[
    {
        'key': 'US',
        'item_a': 1.14,
        'item_b': 1.43
    },
    {
        'key': 'IN',
        'item_a': 0.78,
        'item_b': 0.88
    },
    {
        'key': 'CN',
        'item_a': 0.38,
        'item_b': 0.44
    },
    {
        'key': 'AE',
        'item_a': 0.19,
        'item_b': 0.22
    },    
    {
        'key': 'MX',
        'item_a': 0.95,
        'item_b': 0.99
    },  
    {
        'key': 'RU',
        'item_a': 0.57,
        'item_b': 0.63
    }, 
    {
        'key': 'SA',
        'item_a': 0.52,
        'item_b': 0.49
    },     
    {
        'key': 'TR',
        'item_a': 0.29,
        'item_b': 0.34
    },      
]
)

base = alt.Chart(data=df, title='').encode(
    alt.Y('key:N', axis=alt.Axis(title='', grid=True),sort=alt.EncodingSortField(field='item_b', op='max', order='descending'))
)
rule = base.mark_rule(color='gray').encode(
    alt.X('item_a:Q', axis=alt.Axis(grid=False, title="Value")),
    alt.X2('item_b'),    
)
# rule.save('Just_rule.png', scale_factor=2)
point_a = base.mark_point(color='red', size=80).encode(alt.X('item_a'))
point_b = base.mark_point(color='steelblue', size=80).encode(alt.X('item_b'))
# combined.save('Combined.png', scale_factor=2)

使用适当的Y轴排序的mark_rule

带有丢失Y轴排序的mark_rule和mark_point


(注:此文本为中英对照,仅供参考)
1个回答

1

这是Altair/Vega-Lite中排序和分层的已知错误。已经在Vega-Lite中修复(请参见vega-lite#2177),因此一旦发布Altair 3.0,您的代码应该可以正常工作。与此同时,您可能可以使用此处提到的解决方法。


感谢Jake提供这个信息。关于“一旦Altair 3.0发布,你的代码应该能够正常工作。”,是否已经确定了大致的时间表? - oekici
一旦 Vega-Lite 3.0 发布 - jakevdp

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