|
|
|
|
|
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 = {}
|
|
|
|
|
|
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)
|
|
|
|
|
|
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'])
|
|
|
|
|
|
text_colors = ["#000000"] * len(params)
|
|
fig, ax = plt.subplots(figsize=CHART_CONFIG["figsize"])
|
|
|
|
|
|
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 |