File size: 2,481 Bytes
1900d51
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75


def create_pizza_chart(final_df, selected_ville):
    """Crée le graphique pizza pour une ville donnée"""
    ville_data = final_df[final_df['Ville'] == selected_ville].iloc[0]
    
    params, values, slice_colors = [], [], []
    max_values = {}
    
    # Calcul des valeurs maximales
    for cat_name, cat_info in CATEGORIES.items():
        cat_values = []
        for subcat in cat_info['subcats'].keys():
            if subcat in final_df.columns and pd.notna(ville_data[subcat]):
                cat_values.append(float(ville_data[subcat]))
        if cat_values:
            max_values[cat_name] = max(cat_values)

    # Préparation des données pour le graphique
    for cat_name, cat_info in CATEGORIES.items():
        for subcat, display_text in cat_info['subcats'].items():
            params.append(display_text)
            if subcat in final_df.columns and pd.notna(ville_data[subcat]):
                value = float(ville_data[subcat])
                max_val = max_values[cat_name]
                normalized_value = (value / max_val * 100) if max_val > 0 else 0
                values.append(round(normalized_value, 2))
            else:
                values.append(0)
            slice_colors.append(cat_info['color'])

    # Création du graphique
    text_colors = ["#000000"] * len(params)
    fig, ax = plt.subplots(figsize=CHART_CONFIG["figsize"])
    
    # Créer un dictionnaire de configuration sans figsize pour PyPizza
    pizza_config = {k: v for k, v in CHART_CONFIG.items() if k != "figsize"}
    
    baker = PyPizza(
        params=params,
        **pizza_config
    )

    fig, ax = baker.make_pizza(
        values,
        figsize=(10, 10),
        color_blank_space="same",
        slice_colors=slice_colors,
        value_colors=text_colors,
        value_bck_colors=slice_colors,
        blank_alpha=0.4,
        kwargs_slices=dict(
            edgecolor="#F2F2F2",
            zorder=2,
            linewidth=1
        ),
        kwargs_params=dict(
            color="#000000",
            fontsize=8,
            va="center"
        ),
        kwargs_values=dict(
            color="#000000",
            fontsize=8,
            zorder=3,
            bbox=dict(
                edgecolor="#000000",
                facecolor="white",
                boxstyle="round,pad=0.2",
                lw=1
            )
        )
    )

    return fig, max_values