Altair颜色是覆盖/删除排序顺序

问题描述 投票:1回答:1

具有Altair的新用户,试图通过“玩家数”字段对NFL球员名称进行排序。数据被预先汇总为仅显示每个玩家名称一次,并且与之相关联。

根据-x中的计数对y轴(即“玩家名称”进行排序)在我添加颜色(我想将其作为离散尺寸)之前效果很好。任何想法都需要做什么来防止颜色覆盖Y上的排序?

import altair as alt
import pandas as pd

source = pd.read_csv("C:/Users/abcdef/Documents/user_players.csv", encoding = "ISO-8859-1") 
print(source.head())

bars = alt.Chart(source).mark_bar().encode(
    x=alt.X('Player COUNT:Q'),#,scale=alt.Scale(domain=(1,5),clamp=True)),
    y=alt.Y('Player Name:N',sort='-x')
    #y=alt.Y('Player Name:N',sort=alt.SortField(field="sort_order",op="distinct",order='descending')),
    ,color='Ownership Percentile:O'
).transform_filter(
      alt.FieldLTEPredicate(field='player_row', lte=50)
)

text = bars.mark_text(
    align='left',
    baseline='middle',
    dx=3  # Nudges text to right so it doesn't appear on top of the bar
).encode(
    text='Player COUNT:Q'
)

(bars + text).properties(width =400,height=900)#.interactive()

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9Za1Y0VC5wbmcifQ==” alt =“屏幕截图1”>“屏幕截图2”

sorting colors axis altair
1个回答
0
投票

这看起来像是Vega-Lite渲染器中的错误。您可以通过使用带有显式EncodingSortFieldop代替-x速记来解决此问题:

bars = alt.Chart(source).mark_bar().encode(
    x=alt.X('Player COUNT:Q'),#,scale=alt.Scale(domain=(1,5),clamp=True)),
    y=alt.Y('Player Name:N',sort=alt.EncodingSortField(field="Player COUNT", order='descending', op='max')),
    color='Ownership Percentile:O'
).transform_filter(
      alt.FieldLTEPredicate(field='player_row', lte=50)
)
© www.soinside.com 2019 - 2024. All rights reserved.