001_03 — Création d'un graphe nuage de points avec xlsxwriter
Cahier des charges⚓
1
# CDC 001_03Code Python⚓
1
# TD_EDC_01_001_03.py2
# 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 classeur32
workbook = xlsxwriter.Workbook(str(xlsx_path))
33
34
# Créer la feuille de données35
worksheet = workbook.add_worksheet("Données")
36
37
# En-têtes38
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ées55
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 points62
chart = workbook.add_chart({'type': 'scatter', 'subtype': 'straight_with_markers'})
63
64
# Ajouter UNE série avec les données65
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 graphe72
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 feuille78
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 xlsxwriter2
3
## Objectifs4
- 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
## Fonctionnement11
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 techniques20
- **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
## Utilisation26
```bash27
python 001/001_03.py28
```29
Aucun prérequis : fichier créé de zéro.
30
Fichier produit : `001_do/001_03.xlsx`.31