python - 在 Altair 中为分层图表保留特定的 Y 轴顺序/排序
问题描述
我想在 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)
解决方案
这是Altair/Vega-Lite 中排序 + 分层的一个已知错误。它已在 Vega-Lite 的上游修复(请参阅vega-lite#2177),因此一旦 Altair 3.0 发布,您的代码应该可以正常工作。同时,您也许可以使用此处提到的解决方法。
推荐阅读
- c# - 查找等于给定总和的正数和负数的所有可能组合
- python - 如何使用 Pycharm 在本地服务器上运行项目?
- python - Python 和 FFmpeg 自动化给出错误
- c# - 如何模拟 ODataQueryOptions [Assembly Microsoft.AspNetCore.OData,版本 = 7.3.0.0]?
- c++ - 带有 clangd 完成器的 YouCompleteMe vim 插件似乎无法正常工作
- javascript - 添加新的麻烦
- 至
- 用javascript点击
- 至
- tensorflow - 嵌入层输出形状为 2D
- javascript - 无法从 React 客户端向服务器发送数据
- firebase - nuxt存储模块模式下的firebase身份验证
- javascript - 使用 Javascript 创建表(tableee 添加)