如何让 Altair 根据指定字段对 y 轴进行排序?
How to get Altair to sort the y axis based on specified field?
谁能帮我弄清楚如何让我的 y 轴按数据集中的字段排序?
请参阅下面的代码。我想对 y 轴进行排序,它是 ADP(十进制数字)的字符串连接字段和 NFL 球员姓名。我想通过 ADP 对这个 y 轴进行排序,ADP 是一个名为 "OWNER Player ADP" 的字段,一旦它进入 pandas 数据帧,我就将其转换为浮点数。 (我希望它是一个带小数点的数字)
我还创建了一个名为 ADP 的字段,它几乎是相同的东西,但是当它进入 pandas 数据帧时它是一个 varchar。在任何一种情况下,我似乎都无法在这两个字段的任何一个上对 y 轴进行排序...我还附上了当前输出的两个屏幕截图,以便您可以看到数据输出和图表输出.您可以看到 Aaron Rodgers 位居榜首,但他的 ADP 为 48.3。我希望 ADP 值最低的玩家排在列表顶部...
import altair as alt
import pandas as pd
from main.views import sql_to_dataframe
#--get draft history for a specifc owner, league, and draft type
query ="""
SELECT draft_type,season,"Player Name","Player Team"
,count(*) "Times Drafted"
,cast(round(cast(SUM(pick_no) AS DECIMAL)/cast(COUNT(DISTINCT draft_id) AS DECIMAL),1) as varchar) "OWNER Player ADP"
,cast(round(cast(SUM(pick_no) AS DECIMAL)/cast(COUNT(DISTINCT draft_id) AS DECIMAL),1) as varchar) "ADP"
,concat(cast(round(cast(SUM(pick_no) AS DECIMAL)/cast(COUNT(DISTINCT draft_id) AS DECIMAL),1) as varchar),' ',"Player Team") "Player ADP"
,1 "x_axis"
FROM
mytable
GROUP BY draft_type,season,draft_type,"Player Name","Player Team"
"""
source = sql_to_dataframe(query)
source['OWNER Player ADP'] = source['OWNER Player ADP'].astype(float)
print(source.head())
base=alt.Chart(
source,
title="Player Average Draft Position"
).encode(
x=alt.X('x_axis:O')
,y=alt.Y('Player ADP:O',sort=alt.EncodingSortField(field="OWNER Player ADP:O",order ='descending', op='min'))
#,tooltip=['Player Team','OWNER Player ADP:O']
)
bar=base.mark_square(size=300).encode(
color=alt.Color('Times Drafted:Q', scale=alt.Scale(scheme="darkred"))#,domain=[5,0])
,tooltip=['Player Team','OWNER Player ADP:O','Times Drafted:N']
)
# Configure text
text = base.mark_text(baseline='middle',color='white').encode(
text='Times Drafted:O'
,tooltip=['Player Team','OWNER Player ADP:O','Times Drafted:N']
)
(bar+text).properties(width=50)#.interactive()
alt.EncodingSortField
不需要类型代码,也不会从输入中解析它们。而不是
alt.EncodingSortField(field="OWNER Player ADP:O", ...)
使用
alt.EncodingSortField(field="OWNER Player ADP", ...)
谁能帮我弄清楚如何让我的 y 轴按数据集中的字段排序? 请参阅下面的代码。我想对 y 轴进行排序,它是 ADP(十进制数字)的字符串连接字段和 NFL 球员姓名。我想通过 ADP 对这个 y 轴进行排序,ADP 是一个名为 "OWNER Player ADP" 的字段,一旦它进入 pandas 数据帧,我就将其转换为浮点数。 (我希望它是一个带小数点的数字) 我还创建了一个名为 ADP 的字段,它几乎是相同的东西,但是当它进入 pandas 数据帧时它是一个 varchar。在任何一种情况下,我似乎都无法在这两个字段的任何一个上对 y 轴进行排序...我还附上了当前输出的两个屏幕截图,以便您可以看到数据输出和图表输出.您可以看到 Aaron Rodgers 位居榜首,但他的 ADP 为 48.3。我希望 ADP 值最低的玩家排在列表顶部...
import altair as alt
import pandas as pd
from main.views import sql_to_dataframe
#--get draft history for a specifc owner, league, and draft type
query ="""
SELECT draft_type,season,"Player Name","Player Team"
,count(*) "Times Drafted"
,cast(round(cast(SUM(pick_no) AS DECIMAL)/cast(COUNT(DISTINCT draft_id) AS DECIMAL),1) as varchar) "OWNER Player ADP"
,cast(round(cast(SUM(pick_no) AS DECIMAL)/cast(COUNT(DISTINCT draft_id) AS DECIMAL),1) as varchar) "ADP"
,concat(cast(round(cast(SUM(pick_no) AS DECIMAL)/cast(COUNT(DISTINCT draft_id) AS DECIMAL),1) as varchar),' ',"Player Team") "Player ADP"
,1 "x_axis"
FROM
mytable
GROUP BY draft_type,season,draft_type,"Player Name","Player Team"
"""
source = sql_to_dataframe(query)
source['OWNER Player ADP'] = source['OWNER Player ADP'].astype(float)
print(source.head())
base=alt.Chart(
source,
title="Player Average Draft Position"
).encode(
x=alt.X('x_axis:O')
,y=alt.Y('Player ADP:O',sort=alt.EncodingSortField(field="OWNER Player ADP:O",order ='descending', op='min'))
#,tooltip=['Player Team','OWNER Player ADP:O']
)
bar=base.mark_square(size=300).encode(
color=alt.Color('Times Drafted:Q', scale=alt.Scale(scheme="darkred"))#,domain=[5,0])
,tooltip=['Player Team','OWNER Player ADP:O','Times Drafted:N']
)
# Configure text
text = base.mark_text(baseline='middle',color='white').encode(
text='Times Drafted:O'
,tooltip=['Player Team','OWNER Player ADP:O','Times Drafted:N']
)
(bar+text).properties(width=50)#.interactive()
alt.EncodingSortField
不需要类型代码,也不会从输入中解析它们。而不是
alt.EncodingSortField(field="OWNER Player ADP:O", ...)
使用
alt.EncodingSortField(field="OWNER Player ADP", ...)