如何解决是否可以在Altair上以和X的降序对其进行过滤和绘制?
我试图改编一个answered here before脚本,以筛选排名前十的供应商(proveedor_nombre
),这意味着,那些以降序获得更多资金但从没有工作。
由于我什至不知道自己在做错什么,你们有什么办法知道我可以得到理想的结果
这是原始代码:
# Monto total asignado por proveedor
proveedores_dinero = alt.Chart(df).mark_circle().encode(
x = alt.X('proveedor_nombre:N'),y = alt.Y('sum(monto_contrato_minimo):Q'),)
proveedores_dinero
这里是输出:
解决方法
可以在rank
上应用transform_window
来过滤排名靠前的n
结果。但是,遗漏的证明子圆将绘制在轴x=0
上,在这种情况下,它可以根据顶部的y
值来过滤n+1
值。在以下示例中,我绘制了6个可能的前3个证明人。
# Generate raw data
data = {
'proveedor_nombre': ['proveedor_1','proveedor_2','proveedor_4','proveedor_1','proveedor_3','proveedor_5','proveedor_6','proveedor_5'
],'monto_contrato_minimo': [389,24,80,253,111,54,345,117,9,546,678,99]
}
df = pd.DataFrame.from_dict(data)
# Store value of top n proveedores
data_sum = df.groupby('proveedor_nombre').agg({'monto_contrato_minimo':'sum'}).sort_values(by='monto_contrato_minimo',ascending=False)
# Plot top 3 proveedor_nombre
alt.Chart(df).mark_circle().encode(
x = alt.X('proveedor_nombre:N',sort='-y',scale=alt.Scale(domain=list(data_sum.index[:3]))),y = alt.Y('sum(monto_contrato_minimo):Q'),).transform_window(
rank='rank(monto_contrato_minimo)',sort=[alt.SortField('sum(monto_contrato_minimo)',order='descending')]
).transform_filter(
(alt.datum.rank < 4)
).transform_filter(
(alt.datum.monto_contrato_minimo > data_sum.iloc[3][0])
).properties(
width=500,height=300
)
将导致
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。