是否可以从Altair上的和X中筛选并绘制它?

2024-06-28 20:49:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试改编一个脚本,它是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

这里是输出:

enter image description here


Tags: 代码脚本herealt供应商资金before办法
1条回答
网友
1楼 · 发布于 2024-06-28 20:49:30

可以在transform_window上应用rank来过滤顶部的n结果。但是,丢失的proveedores的圆将绘制在轴x=0上,在这种情况下,它通过顶部的n+1值过滤y值。在下面的示例中,我正在绘制6个可能的前3个Proveeder

# Generate raw data
data = {
    'proveedor_nombre': ['proveedor_1', 'proveedor_2', 'proveedor_4', 'proveedor_1', 'proveedor_2', 'proveedor_3',
                         'proveedor_4', 'proveedor_1', 'proveedor_5', 'proveedor_6', 'proveedor_4', '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
)

将导致

enter image description here

相关问题 更多 >