Affichage dans format spécifique en python
Maissa -
Bonjour,
SVP, j'ai une table de données que je dois l'afficher dans un format spécifique pour mon projet, mais je ne trouve pas ni la bonne solution ni l'affichage comme je veux. Aidez-moi svp.
import matplotlib.pyplot as plt from matplotlib.patches import Rectangle def display_data(data): # Créer une figure et un axe fig, ax = plt.subplots(figsize=(12, 8)) # Définir les dimensions des rectangles rect_y = 0.2 # Position y des rectangles rect_height = 0.6 # Hauteur des rectangles first_rect_width = 0.2 # Largeur du premier rectangle (plus large) other_rect_width = 0.1 # Largeur des autres rectangles # Créer les rectangles noirs et les ajouter à l'axe for i in range(7): # Calculer la position x de chaque rectangle current_rect_x = 0.1 + i * other_rect_width # Déterminer la largeur à utiliser rect_width = first_rect_width if i == 0 else other_rect_width # Créer le rectangle rect = Rectangle((current_rect_x, rect_y), rect_width, rect_height, edgecolor='black', facecolor='none', linewidth=2) ax.add_patch(rect) # Ajouter les données au premier rectangle if i == 0: # Ajouter la date en haut à gauche ax.text(current_rect_x + 0.02, rect_y + rect_height - 0.02, f"{data['date']}", fontsize=10, va='top', ha='left') # Ajouter le type de turbulence en haut à droite ax.text(current_rect_x + rect_width - 0.02, rect_y + rect_height - 0.02, f"{data['type_turbulence']}", fontsize=10, va='top', ha='right') # Ajouter l'aéronef en gras, centré ax.text(current_rect_x + rect_width / 2, rect_y + rect_height - 0.08, f"{data['aeronef']}", fontsize=10, va='top', ha='center', fontweight='bold') # Ajouter la vitesse à droite, sous l'aéronef ax.text(current_rect_x + rect_width - 0.02, rect_y + rect_height - 0.14, f"{data['vitesse']}", fontsize=10, va='top', ha='right') # Ajouter le départ, l'heure et la destination sous la vitesse ax.text(current_rect_x + 0.02, rect_y + rect_height - 0.2, f"{data['depart']} à {data['heure']} {data['destination']}", fontsize=10, va='top', ha='left') # Ajouter les données dans les autres rectangles elif i == 1: ax.text(current_rect_x + 0.02, rect_y + rect_height - 0.2, f"{data['niveau']}", fontsize=10, va='top', ha='left', wrap=True) elif i == 5: ax.text(current_rect_x + 0.02, rect_y + rect_height - 0.2, f"{data['information']}", fontsize=10, va='top', ha='left', wrap=True) # Définir les limites du graphique ax.set_xlim(0, 1) ax.set_ylim(0, 1) # Masquer les axes pour un affichage plus propre ax.axis('off') # Afficher le graphique plt.show() # Exemple d'utilisation: data = { 'date': '01/02/2024', 'aeronef': 'AFA22', 'type_turbulence': 'AT3/L', 'vitesse': 'N0100', 'depart': 'DTTA', 'heure': '0810', 'destination': 'DTTA', 'niveau': 'A015', 'information': 'DOF/240202 REG/TSAFH OPR/AFA SRM/1110' } display_data(data)
Windows / Chrome 120.0.0.0
- Affichage dans format spécifique en python
- Format epub - Guide
- Format factory - Télécharger - Conversion & Codecs
- Hp usb disk storage format tool - Télécharger - Stockage
- Format apfs - Guide
- Format bin - Guide
2 réponses
Salut,
Est-ce que matplotlib t'est imposé pour ton projet ?
Je vois plutôt faire ça avec une GUi comme tkinter.
Bonjour,
Entre tkinter et matplotlib, je choisirais plutôt matplotlib car tu peux assez facilement exporter l'image dans le format de ton choix une fois celle-ci préparée.
Mais tu pourrais aussi directement voir cette tâche comme générer un contenu HTML dans lequel tout est bien positionné, ainsi tu ne dépendrais ni de matplotlib, ni de tkinter. En fait, tout dépend de ce que tu veux faire.
Si on reste sur matplotlib, tu devrais commencer par utiliser un repère orthonormé en ajoutant en fin de script :
ax.set_aspect(aspect="equal")
Comme ton image png fait 2000px x 350px, le plus simple serait ensuite de définir les bornes des axes X et Y en conséquence.
ax.set_xlim(0, 2000) ax.set_ylim(0, 350)
Il ne reste ensuite qu'à mesurer sur le png les coordonnées des différents objets (textes, rectangles, etc), puis les utiliser lors des appels de Rectangle et ax.text.
Bonne chance
Hé hé, oui, pourquoi pas :-) Mais bon... Il n'y a pas de saisie à ce stade :-)
- Plus sérieusement, on peut avoir besoin de générer un dessin sans pour autant dépendre d'un module tel que tkinter, normalement utilisé pour faire une interface graphique. Ça me paraît un peu "overkill".
- Est-ce que matplotlib n'est pas lui-même "overkill", hé bien je pense que si. À moins que le projet ait réellement besoin de primitives propres à matplotlib (par exemple, tracer des courbes) il y a sans doute des solutions plus indiquées.
- Personnellement, j'aurais plutôt opté pour faire un dessin en SVG. Le SVG permet un rendu parfait là ou d'autre formats d'image peuvent pixeliser et est naturellement supporté par les navigateurs actuels (firefox, chrome, etc.). Côte python :
Bonne chance
salut,
non matplotlib n'est pas imposé. Mais je ne savais pas comment le faire, ce code m'a donnée ce résultat