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

标签 python data-visualization altair

我想在此处的 Altair 文档中显示的网格图上构建:https://altair-viz.github.io/gallery/beckers_barley_trellis_plot.html .

在下面显示的代码中,我正在创建具有特定 Y 轴排序的“mark_rule”图表,并使用“mark_point”对其进行分层以突出显示端点。但是,当我在“mark_rule”之上添加“mark_point”层时,Y 轴排序/顺序丢失;我无法重新排序/重新排序分层图表的 Y 轴。请参阅下方具有正确 Y 轴排序的“mark_rule”图和“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)

mark_rule with proper Y-Axis ordering

mark_rule + mark_point with Y-Axis ordering lost

最佳答案

这是一个 known bug在 Altair/Vega-Lite 中进行排序 + 分层。它已在 Vega-Lite 的上游修复(参见 vega-lite#2177 ),因此一旦 Altair 3.0 发布,您的代码应该可以正常工作。同时,您可以使用提到的解决方法 here .

关于python - 在 Altair 中为分层图表保持特定的 Y 轴顺序/排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54047717/

相关文章:

r - ggplot根据月份的阴影背景

python - 在带 Altair 的条形图上使用颜色似乎可以防止 zero=False 在比例尺上产生预期效果

python - 如何使用 Python Altair 将 x 轴和 y 轴的交点从 0 移动到 1?

python - 成对散点图矩阵

python - 如何将剧作家docker镜像添加到docker compose?

c# - 从 C# 调用 Numpy 和 scikit-learn

python - 使用 pandas 根据键变量将多行转换为单行

python - 模型保存仅更新特定字段

python - 为什么我的 google colab session 不断崩溃?

c# - 如何使用 C# 在 x 轴 MSChart 中设置值