I'm building a radial chart in python but can't order the values of the plot based on the 'categoria' values. I already tried to sort the df and force through domain and sort in the altair code but can't get the desired result. What I'm doing wrong?
Here's a sample of my current dataframe:
index | da_tipo_servicio_salud | categoria | porcentaje | rubro |
---|---|---|---|---|
57 | En ambos, público y privado | Menos de $200 pesos | 44.44444444444444 | Transporte |
36 | En ambos, público y privado | Menos de $200 pesos | 7.142857142857142 | Medicamentos |
15 | En ambos, público y privado | Menos de $200 pesos | 3.571428571428571 | Citas médicas |
48 | En ambos, público y privado | Entre $200 y $500 pesos | 29.629629629629626 | Transporte |
and the altair code I'm using:
orden_monto = ['Menos de $200 pesos', 'Entre $200 y $500 pesos', 'Entre $500 y $800 pesos', 'Entre $800 y $1,000 pesos', 'Entre $1,000 y $1,500 pesos', 'Entre $1,500 y $2,000 pesos', 'Más de $2,000 pesos']
base = alt.Chart(df_combinado_orden_ambos).transform_filter(
alt.datum.rubro == 'Medicamentos'
).encode(
theta=alt.Theta(field='porcentaje', type='quantitative', stack=True),
radius=alt.Radius(field='porcentaje', type='quantitative', scale=alt.Scale(type='sqrt', zero=True, rangeMin=100)),
color=alt.Color('categoria:N', scale=alt.Scale(scheme='blues', domain=orden_monto), sort=orden_monto)
).properties(
title={
'text': ['Distribución porcentual por categoría'],
'subtitle': ['Medicamentos'],
'anchor': 'start',
'offset': 20
}
)
c1 = base.mark_arc(innerRadius=20, cornerRadius=5, stroke="#fff")
c2 = base.mark_text(radiusOffset=25).encode(text=alt.Text('porcentaje:Q', format='.0f'))
final_chart = c1 + c2
final_chart.display()
Try using the order
encoding and set order='categoria'
.