book-generator-orgmode/gantt_parser.py

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')