71 lines
2 KiB
Python
71 lines
2 KiB
Python
import pandas as pd
|
|
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
import matplotlib.patches as patches
|
|
from matplotlib.patches import FancyBboxPatch
|
|
|
|
# Lire le fichier CSV
|
|
df = pd.read_csv('intrigues.csv')
|
|
|
|
# Créer un diagramme de Gantt
|
|
fig, ax = plt.subplots(figsize=(12, 8))
|
|
|
|
# Définir les couleurs
|
|
colors = plt.cm.viridis(np.linspace(0, 1, len(df)))
|
|
|
|
# Définir les valeurs de Début et de Fin pour chaque tâche avec des barres aux bords arrondis
|
|
bar_height = 0.6
|
|
for i, row in df.iterrows():
|
|
start = row['Début']
|
|
end = row['Fin']
|
|
width = end - start
|
|
|
|
# Créer une barre avec des bords arrondis
|
|
fancy_box = FancyBboxPatch(
|
|
(start, i - bar_height/2), # (x, y)
|
|
width, # width
|
|
bar_height, # height
|
|
boxstyle=f"round,pad=0.02,rounding_size=0.2",
|
|
facecolor=colors[i],
|
|
alpha=0.8,
|
|
edgecolor='black',
|
|
linewidth=1
|
|
)
|
|
ax.add_patch(fancy_box)
|
|
|
|
# Ajouter le texte du nom de l'intrigue dans la barre si assez large
|
|
if width > 1.5:
|
|
ax.text(
|
|
start + width/2,
|
|
i,
|
|
row['Intrigue'],
|
|
ha='center',
|
|
va='center',
|
|
color='white',
|
|
fontweight='bold'
|
|
)
|
|
|
|
# Définir les étiquettes pour les tâches
|
|
ax.set_yticks(range(len(df)))
|
|
ax.set_yticklabels(df['Intrigue'])
|
|
|
|
# Définir les étiquettes pour les valeurs
|
|
ax.set_xticks(range(int(df['Début'].min()), int(df['Fin'].max())+1))
|
|
ax.set_xticklabels(ax.get_xticks())
|
|
|
|
# Ajouter un titre au diagramme
|
|
ax.set_title('Diagramme des Intrigues', fontsize=16)
|
|
|
|
# Ajouter une grille pour faciliter la lecture
|
|
ax.grid(True, linestyle='--', alpha=0.7)
|
|
|
|
# Ajuster les limites du graphique
|
|
ax.set_xlim(df['Début'].min() - 0.5, df['Fin'].max() + 0.5)
|
|
ax.set_ylim(-0.5, len(df) - 0.5)
|
|
|
|
# Améliorer l'apparence générale
|
|
plt.tight_layout()
|
|
|
|
# Sauvegarder en PNG et SVG
|
|
plt.savefig("graphique_gantt_intrigues.png", dpi=150, bbox_inches='tight')
|
|
plt.savefig("graphique_gantt_intrigues.svg", format='svg', bbox_inches='tight')
|