我想基于https://altair-viz.github.io/gallery/beckers_barley_trellis_plot.html的Altair文档中显示的网格图。
在下面显示的代码中,我将创建具有特定Y轴排序的“ mark_rule”图表,并使用“ mark_point”对其进行分层以突出显示端点。但是,当我在“ mark_rule”的顶部添加“ mark_point”层时,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)
答案 0 :(得分:0)
这是Altair / Vega-Lite中进行分类+分层的known bug。它已在Vega-Lite中进行了上游修复(请参见vega-lite#2177),因此,在Altair 3.0发布后,您的代码应该可以正常工作。同时,您也许可以使用上述here的解决方法。