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 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 |
6 | En ambos, público y privado | Entre $200 y $500 pesos | 10.714285714285714 | Citas médicas |
27 | En ambos, público y privado | Entre $200 y $500 pesos | 10.714285714285714 | Medicamentos |
30 | En ambos, público y privado | Entre $500 y $800 pesos | 14.285714285714285 | Medicamentos |
51 | En ambos, público y privado | Entre $500 y $800 pesos | 11.11111111111111 | Transporte |
9 | En ambos, público y privado | Entre $500 y $800 pesos | 21.428571428571427 | Citas médicas |
12 | En ambos, público y privado | Entre $800 y $1,000 pesos | 14.285714285714285 | Citas médicas |
33 | En ambos, público y privado | Entre $800 y $1,000 pesos | 25.0 | Medicamentos |
54 | En ambos, público y privado | Entre $800 y $1,000 pesos | 11.11111111111111 | Transporte |
42 | En ambos, público y privado | Entre $1,000 y $1,500 pesos | 3.7037037037037033 | Transporte |
0 | En ambos, público y privado | Entre $1,000 y $1,500 pesos | 35.714285714285715 | Citas médicas |
21 | En ambos, público y privado | Entre $1,000 y $1,500 pesos | 21.428571428571427 | Medicamentos |
45 | En ambos, público y privado | Entre $1,500 y $2,000 pesos | 0.0 | Transporte |
24 | En ambos, público y privado | Entre $1,500 y $2,000 pesos | 14.285714285714285 | Medicamentos |
3 | En ambos, público y privado | Entre $1,500 y $2,000 pesos | 10.714285714285714 | Citas médicas |
60 | En ambos, público y privado | Más de $2,000 pesos | 0.0 | Transporte |
39 | En ambos, público y privado | Más de $2,000 pesos | 7.142857142857142 | Medicamentos |
18 | En ambos, público y privado | Más de $2,000 pesos | 3.571428571428571 | Citas médicas |
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 + c2final_chart.display()