Affichage dans format spécifique en python

Maissa - 16 avril 2024 à 18:54
 Maissa - 19 avril 2024 à 02:13

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

A voir également:

2 réponses

Diablo76 Messages postés 157 Date d'inscription vendredi 25 novembre 2022 Statut Membre Dernière intervention 30 avril 2024 40
16 avril 2024 à 19:44

Salut,

Est-ce que matplotlib t'est imposé pour ton projet ?

Je vois plutôt faire ça avec une GUi comme tkinter.

0

salut,

non matplotlib n'est pas imposé. Mais je ne savais pas comment le faire, ce code m'a donnée ce résultat

0
mamiemando Messages postés 33088 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2024 7 750
Modifié le 17 avril 2024 à 12:40

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

0
Diablo76 Messages postés 157 Date d'inscription vendredi 25 novembre 2022 Statut Membre Dernière intervention 30 avril 2024 40
17 avril 2024 à 19:18

Salut,

Et pourquoi pas les deux, tkinter pour la saisie des données et matplotlib pour l'affichage et l'export ;-)

0
mamiemando Messages postés 33088 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2024 7 750 > Diablo76 Messages postés 157 Date d'inscription vendredi 25 novembre 2022 Statut Membre Dernière intervention 30 avril 2024
18 avril 2024 à 14:19

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 :
    • drawsvg me paraît être une solution plus indiquée pour générer le SVG.
    • svglib peut être utilisé en complément s'il faut convertir le SVG vers un autre format (par exemple, pdf ou png).

Bonne chance

0
Maissa > mamiemando Messages postés 33088 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2024
19 avril 2024 à 02:13

Bonsoir, 

Merci beaucoup pour l'idée, je vais la tester et, voire ce qu'elle va me donner.

0