可以在 Altair 上从总和 X 的降序过滤和绘制它吗?
It is possible to filter and plot it in a descending from sum X on Altair?
我尝试改编一个 的脚本来过滤前十名供应商 (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
这里输出:
可以在 transform_window
上应用 rank
来过滤前 n
个结果。但是,缺少的验证者的圆圈将绘制在轴 x=0
上,在这种情况下,它可以通过顶部 n+1
值过滤 y
值。在下面的示例中,我绘制了 6 个可能的前 3 个证明者。
# 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
)
将导致
我尝试改编一个 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
这里输出:
可以在 transform_window
上应用 rank
来过滤前 n
个结果。但是,缺少的验证者的圆圈将绘制在轴 x=0
上,在这种情况下,它可以通过顶部 n+1
值过滤 y
值。在下面的示例中,我绘制了 6 个可能的前 3 个证明者。
# 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
)
将导致