001_03 — Création d'un graphe nuage de points avec xlsxwriter

Cahier des charges

1
# CDC 001_03

Code Python

1
# TD_EDC_01_001_03.py
2
# Résumé : Crée un fichier Excel avec un graphe nuage de points N(i) vs ttf(i)
3
# en utilisant xlsxwriter (création directe, pas de modification de fichier existant)
4
from pathlib import Path
5
import subprocess
6
import xlsxwriter
7
8
9
def build_paths() -> Path:
10
    """Calcule le chemin du fichier Excel de sortie."""
11
    script = Path(__file__).resolve()
12
    root = script.parent.parent
13
    stem = script.stem
14
    base_dir_name = script.parent.name
15
    xlsx_dir = root / f"{base_dir_name}_do"
16
    xlsx_dir.mkdir(parents=True, exist_ok=True)
17
    
18
    xlsx_path = (xlsx_dir / f"{stem}.xlsx").resolve()
19
    return xlsx_path
20
21
22
def delete_if_exists(file_path: Path) -> None:
23
    """Supprime le fichier s'il existe déjà."""
24
    if file_path.exists():
25
        file_path.unlink()
26
27
28
def create_excel_with_chart(xlsx_path: Path, n: int = 9, ttf_values: list = None) -> None:
29
    """Crée un fichier Excel avec données et graphe nuage de points."""
30
    
31
    # Créer le classeur
32
    workbook = xlsxwriter.Workbook(str(xlsx_path))
33
    
34
    # Créer la feuille de données
35
    worksheet = workbook.add_worksheet("Données")
36
    
37
    # En-têtes
38
    worksheet.write('A1', 'i')
39
    worksheet.write('B1', 'ttf(i)')
40
    worksheet.write('C1', 'dN(i)')
41
    worksheet.write('D1', 'N(i)')
42
    
43
    # Calculer les valeurs dN(i) et N(i)
44
    dN_values = [0] + [1] * n  # dN(0)=0, puis dN(i)=1 pour i≥1
45
    N_values = []
46
    N_current = n
47
    N_values.append(N_current)
48
    
49
    for i in range(1, n + 1):
50
        N_current = N_current - dN_values[i]
51
        N_values.append(N_current)
52
        
53
   
54
    # Écrire les données
55
    for i in range(n + 1):
56
        worksheet.write(i + 1, 0, i)  # Rang i
57
        worksheet.write(i + 1, 1, ttf_values[i] if ttf_values else 0)  # ttf(i)
58
        worksheet.write(i + 1, 2, dN_values[i])  # dN(i)
59
        worksheet.write(i + 1, 3, N_values[i])  # N(i)
60
    
61
    # Créer le graphe nuage de points avec lignes reliant les points
62
    chart = workbook.add_chart({'type': 'scatter', 'subtype': 'straight_with_markers'})
63
    
64
    # Ajouter UNE série avec les données
65
    chart.add_series({
66
        'name':       'N(ttf)',
67
        'categories': ['Données', 1, 1, n + 1, 1],  # ttf(i) : B2:B11
68
        'values':     ['Données', 1, 3, n + 1, 3],  # N(i) : D2:D11
69
    })
70
    
71
    # Configurer le graphe
72
    chart.set_title({'name': 'N(i) en fonction de ttf(i)'})
73
    chart.set_x_axis({'name': 'ttf(i)'})
74
    chart.set_y_axis({'name': 'N(i)'})
75
    chart.set_style(13)
76
    
77
    # Insérer le graphe dans une nouvelle feuille
78
    chart_sheet = workbook.add_worksheet("Graphe")
79
    chart_sheet.insert_chart('A1', chart, {'x_scale': 2, 'y_scale': 2})
80
    
81
    workbook.close()
82
83
84
def open_in_excel(xlsx_path: Path) -> None:
85
    """Ouvre le classeur généré dans Excel."""
86
    subprocess.Popen(["start", "excel", str(xlsx_path)], shell=True)
87
88
89
def main() -> None:
90
    """Pipeline : crée le fichier Excel avec données et graphe."""
91
    xlsx_path = build_paths()
92
    
93
    ttf_i = [0, 250, 400, 550, 700, 850, 1000, 1150, 1300, 1450]
94
    
95
    delete_if_exists(xlsx_path)
96
    create_excel_with_chart(xlsx_path, n=9, ttf_values=ttf_i)
97
    open_in_excel(xlsx_path)
98
99
100
if __name__ == "__main__":
101
    main()
102

Documentation

1
# 001_03 — Création d'un graphe nuage de points avec xlsxwriter
2
3
## Objectifs
4
- Créer un fichier Excel complet avec données et graphe.
5
- Afficher un graphe XY (nuage de points) : N(i) en fonction de ttf(i).
6
- Relier les points par des lignes droites.
7
- Sauvegarder le résultat en `001_03.xlsx`.
8
- Ouvrir le fichier dans Excel.
9
10
## Fonctionnement
11
1. Supprime le fichier `001_03.xlsx` s'il existe déjà.
12
2. Crée un nouveau classeur avec `xlsxwriter`.
13
3. Crée une feuille "Données" avec les colonnes : i, ttf(i), N(i).
14
4. Calcule les valeurs N(i) en Python : N(0)=9, puis décrémentation de 1.
15
5. Crée un graphe scatter avec subtype 'straight_with_markers'.
16
6. Insère le graphe dans une feuille "Graphe" dédiée.
17
7. Lance Excel sur le fichier.
18
19
## Points techniques
20
- **xlsxwriter** : création de fichiers Excel avec support natif des graphes.
21
- **ScatterChart** : type 'scatter' avec subtype 'straight_with_markers' pour lignes + marqueurs.
22
- **Calcul Python** : Valeurs N(i) calculées directement (pas de formules Excel).
23
- Données : n=9, ttf_i=[0, 250, 400, 550, 700, 850, 1000, 1150, 1300, 1450].
24
25
## Utilisation
26
```bash
27
python 001/001_03.py
28
```
29
Aucun prérequis : fichier créé de zéro.
30
Fichier produit : `001_do/001_03.xlsx`.
31