Aller au contenu

Représentation graphique en Python

Cette page donne quelques éléments de code Python pour représenter des points dans un repère. On utilise pour cela la bibliothèque matplotlib.

Installer la bibliothèque matplotlib

Cette bibliothèque n'est pas inclusepar défaut dans Python. Pour l'installer, il faut la télécharger selon une méthode analogue à celle de l'installation du module PIL

L'instruction d'installation est :

>>> pip install matplotlib

Chaque programme Python doit être sauvegardé sous forme de fichier texte avec l'extension .py.
Enregistrez ce fichier dans le dossier [G06_Algo_KNN] avec le nom donné à l'exercice : ProgG06.51.py, ProgG06.52.py, etc...

Memento

Un memento des instructions usuelles utilisables avec la bibliothèque matplotlib peut être téléchargé en cliquant ici.

ProgG06.51 - Tracer un point dans un repère

  1. Copiez, collez puis exécutez le code ci-dessous.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    # import de la bibliothèque pour nos figures
    import matplotlib.pyplot as plt 
    
    # dessin d'un point de coordonnées (2 ; 3),
    # représenté par un carré ( 's' pour square)
    # de couleur noir (k)
    # de taille 10
    plt.plot(2, 3, marker='s', color='k', markersize=10)
    
    # pour lancer la construction de la figure à l'écran
    plt.show()
    
    Image à obtenir

  2. Modifiez la forme, la couleur, la taille et/ou les coordonnées du point pour bien comprendre les différents paramètres utilisés.

    Liste des formes et couleurs

    Vous trouverez la liste des markers (forme des points) ici ou .

    La liste des couleurs est ici ou .

    Un memento général est .

ProgG06.52 - Tracer un nuage de points dans un repère

On représente maintenant une série de points. Pour cela, on regroupe les abscisses de ces points dans un tableau (liste Python) noté X et les ordonnées dans un tableau noté Y.

  1. Copiez, collez puis exécutez le code ci-dessous.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    import matplotlib.pyplot as plt
    
    X = [0, 1, 2, 3, 4]
    Y = [0, 1, 4, 9, 16]
    
    # points de couleur cyan (c), de forme hexagonale (h)
    # on ne relie pas les points (linestyle = '')
    plt.plot(X, Y, marker='h', color='c', markersize=20, linestyle='')
    plt.show()
    
    Image à obtenir

  2. Notez sur votre cahier les coordonnées des points placés dans ce repère.

    Réponse

    Les points placés ci-dessus sont donc les points de coordonnées (0 ; 0), (1 ; 1), (2 ; 4), (3 ; 9) et (4 ; 16).

  3. Modifiez ce programme pour tracer la courbe représentative de la fonction f définie par f(x) = x^3 - 27 x pour les valeurs de x entières et comprises entre 0 et 7.

    Image à obtenir

    Valeurs de linestyle

    Les valeurs pour linestyle (ou ls en abrégé) sont :

    • 'solid'
    • 'dashed'
    • 'dashdot'
    • 'dotted'
    • '-'
    • '--'
    • '-.'
    • ':'
    • 'None'
    • ' '
    • '' (chaîne vide)
    Un code possible
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import matplotlib.pyplot as plt
    
    X = [i for i in range(8)]
    Y = [x**3-27*x for x in X]
    
    # points de couleur cyan (c), de forme hexagonale (h)
    # on ne relie pas les points (linestyle = '')
    plt.plot(X, Y, marker='o', color='m', markersize=10, linestyle='--')
    plt.show()
    

ProgG06.53 - Nuage issu d'un dictionnaire

Pour cet exercice, vous pouvez télécharger le fichier à compléter.

On considère un nuage de points où chaque point est défini comme un dictionnaire possédant trois clefs :

  • 'x' pour l'abscisse du point ;
  • 'y' pour l'ordonnée du point ;
  • 'forme' pour la forme du point dans le repère ('croix', 'carre' ou 'triangle').
Un exemple de nuage
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
nuage = [{'x': -5, 'y': -2, 'forme': 'croix'},
        {'x': 7, 'y': -8, 'forme': 'carre'},
        {'x': 5, 'y': 0, 'forme': 'triangle'},
        {'x': -2, 'y': 1, 'forme': 'carre'},
        {'x': -9, 'y': -3, 'forme': 'carre'},
        {'x': 1, 'y': 6, 'forme': 'carre'},
        {'x': -4, 'y': 7, 'forme': 'triangle'},
        {'x': -2, 'y': 8, 'forme': 'triangle'},
        {'x': -4, 'y': -9, 'forme': 'croix'},
        {'x': 0, 'y': 9, 'forme': 'croix'},
        {'x': -6, 'y': -4, 'forme': 'triangle'},
        {'x': 10, 'y': -2, 'forme': 'croix'},
        {'x': -3, 'y': -1, 'forme': 'croix'},
        {'x': -3, 'y': -7, 'forme': 'carre'},
        {'x': 7, 'y': -3, 'forme': 'croix'},
        {'x': -3, 'y': 9, 'forme': 'carre'},
        {'x': 5, 'y': -8, 'forme': 'carre'},
        {'x': -10, 'y': -5, 'forme': 'carre'},
        {'x': -10, 'y': -3, 'forme': 'croix'},
        {'x': 6, 'y': 8, 'forme': 'triangle'}]

Compléter la définition de la fonction affichage() en respectant ses spécifications et en utilisant les instructions mises en œuvre dans les deux exercices précédents.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
def affichage(nuage):
    """
    nuage - list, Tableau de dictionnaires dont les clefs sont :
            'x', l'abscisse du point
            'y', l'ordonnée du point
            'forme', la forme du point ("carre", "croix" ou "triangle")
    Sortie: None - Affichage du nuage en utilisant la bibliothèque matplotlib
    """
    # Implémentation du nuage de points
    # A compléter ci-dessous





    # Affichage du nuage
    plt.grid(True)
    plt.show()
Affichage du nuage de l'exemple

Exemple d'affichage

Une piste

Voici les « marker » qui correspondent à chaque forme :

  • carré : 's'
  • croix : '+'
  • triangle : 'v'
Une solution possible
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
def affichage(nuage):
    """
    nuage - list, Tableau de dictionnaires dont les clefs sont :
            'x', l'abscisse du point
            'y', l'ordonnée du point
            'forme', la forme du point ("carre", "croix" ou "triangle")
    Sortie: None - Affichage du nuage en utilisant la bibliothèque matplotlib
    """
    # Implémentation du nuage de points
    forme = {"carre": ('s', 'r'), "croix": ('+', 'g'), "triangle": ('v', 'b')}
    for clef in forme.keys():
        abscisses = []
        ordonnees = []
        for dico in nuage:
            if dico["forme"] == clef:
                abscisses.append(dico["x"])
                ordonnees.append(dico["y"])
        plt.plot(abscisses, ordonnees, c = forme[clef][1],
                                        marker = forme[clef][0],
                                        linestyle = "",
                                        zorder=4)
    # Affichage du nuage
    plt.grid(True)
    plt.show()