Rugby / app /components /charts.py
2nzi's picture
app
1900d51 verified
raw
history blame
2.48 kB
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