Python >> Tutoriel Python >  >> Python Tag >> Matplotlib

Matplotlib Line Plot - Un guide illustré utile

Le tracé linéaire est le plus emblématique de tous les tracés. Pour en dessiner un dans matplotlib, utilisez le plt.plot() fonction et transmettez-lui une liste de nombres utilisés comme valeurs de l'axe y. Par défaut, les valeurs de l'axe des abscisses sont les index de liste de la ligne transmise. Matplotlib connecte automatiquement les points avec une ligne bleue par défaut. Vous pouvez modifier le type de ligne et la taille du marqueur avec des arguments supplémentaires.

Syntaxe de plt.plot() :

plot([x], y, [fmt], *, data=None, **kwargs)

Exemples d'appels :

>>> plot(x, y)        # plot x and y using default line style and color
>>> plot(x, y, 'bo')  # plot x and y using blue circle markers
>>> plot(y)           # plot y using x as index array 0..N-1
>>> plot(y, 'r+')     # ditto, but with red plusses

Exemples de tracé de lignes minimales

L'exemple minimal est le suivant :

import matplotlib.pyplot as plt
plt.plot([0, 1, 2, 3])
plt.ylabel('line plot')
plt.show()

La sortie générée par ces quatre lignes de code est le tracé linéaire simple suivant :

Jusqu'ici tout va bien! Voici un exemple un peu plus avancé utilisant le seaborn style pour l'intrigue :

import matplotlib.pyplot as plt
import numpy as np

# I prefer this style to the default
plt.style.use('seaborn')

# Square numbers from 0-10 inclusive
squared = [x**2 for x in range(11)]
plt.plot(squared)
plt.show()

Facile. Dans cet article, je vais vous montrer comment ajouter des étiquettes d'axe, tracer plusieurs lignes et personnaliser votre tracé pour présenter vos données de manière experte.

Comme les nuages ​​de points, les tracés linéaires montrent la relation entre deux variables. Contrairement aux nuages ​​de points, ils sont souvent utilisés pour mesurer l'évolution d'une variable dans le temps. Ainsi, nous utiliserions un graphique linéaire pour montrer comment le marché boursier s'est comporté plutôt qu'un nuage de points.

Les tracés linéaires sont excellents pour les données de séries chronologiques car nous pouvons mettre le temps sur l'axe des x et tout ce que nous mesurons sur l'axe des y.

Prenons un exemple classique :le marché boursier américain.

Matplotlib Line Plot Stock Market Example

Ce graphique montre l'indice S&P 500 sur 2019 en utilisant les paramètres par défaut de matplotlib. Le S&P 500 suit les 500 principales actions américaines et reflète donc l'ensemble du marché boursier.

Vous pouvez télécharger les données gratuitement en ligne.

J'ai divisé les données en deux tableaux NumPy. Un pour les valeurs S&P 500 (par exemple sp2019 ) et un pour les dates (par exemple dates2019 ).

Remarque :les dates ne comprennent que les jours ouvrés car la bourse n'est ouverte que les jours ouvrés.

# First 5 business days in 2019
>>> bus2019[:5]
[numpy.datetime64('2019-01-01'),
numpy.datetime64('2019-01-02'),
numpy.datetime64('2019-01-03'),
numpy.datetime64('2019-01-04'),
numpy.datetime64('2019-01-07')]

# First 5 S&P 500 values in 2019
# It contains some missing values (NaN - Not a Number)
>>> sp2019[:5]
array([[    nan],
      [2510.03],
      [2447.89],
      [2531.94],
      [2549.69]])

Il y a des trous dans le tracé à cause des valeurs manquantes. Mais les données sont suffisamment bonnes pour nos besoins.

Pour tracer cela, nous passons sp2019 à plt.plot() puis appelez le plt.show() .

plt.plot(sp2019)
plt.show()

Super. Il affiche les valeurs du S&P 500 sur l'axe des ordonnées, mais quels sont les chiffres sur l'axe des abscisses ?

Si vous ne transmettez qu'une liste ou un tableau NumPy, matplotlib utilise les index de liste pour les valeurs de l'axe des abscisses.

>>> len(sp2019)
250

Comme il y a 250 valeurs dans sp2019, l'axe des x va de 0 à 250.

Dans ce cas, ce serait mieux si nous avions des dates sur l'axe des abscisses. Pour ce faire, nous passons deux arguments à plt.plot() . D'abord les valeurs de l'axe des x, puis celles de l'axe des y.

# x-axis for dates, y-axis for S&P 500 index
plt.plot(dates2019, sp2019)
plt.show()

Matplotlib espace les dates uniformément et choisit le meilleur niveau de précision. Pour cette intrigue, il a choisi des mois. Ce serait ennuyeux s'il choisissait des dates au jour près.

Enfin, ajoutons quelques étiquettes d'axe et un titre.

plt.plot(bus2019, sp2019)
plt.title('S&P500 Index - 2019')
plt.xlabel('Date')
plt.ylabel('Index')
plt.show()

Parfait. Pour économiser de l'espace, j'exclurai les lignes de code qui définissent les étiquettes et le titre de l'axe. Mais assurez-vous de les inclure dans vos parcelles.

Matplotlib Couleur du tracé de la ligne

La couleur est une partie extrêmement importante du traçage et mérite un article entier en soi. Consultez les documents Seaborn pour un excellent aperçu.

La couleur peut faire ou défaire votre intrigue. Certaines combinaisons de couleurs rendent ridiculement facile la compréhension des données et d'autres la rendent impossible.

Cependant, l'une des raisons de changer la couleur est purement esthétique.

On choisit la couleur des points en plt.plot() avec le mot clé c ou color . La valeur par défaut est le bleu.

Vous pouvez définir la couleur de votre choix à l'aide d'un tuple RVB ou RVBA (rouge, vert, bleu, alpha). Chaque élément de ces tuples est un flottant en [0.0, 1.0] . Vous pouvez également passer une chaîne hexadécimale RGB ou RGBA telle que '#1f1f1f' . Cependant, la plupart du temps, vous utiliserez l'une des plus de 50 couleurs nommées intégrées. Les plus courantes sont :

  • 'b' ou 'blue'
  • 'r' ou 'red'
  • 'g' ou 'green'
  • 'k' ou 'black'
  • 'w' ou 'white'

Voici le tracé de l'indice S&P500 pour 2019 en utilisant différentes couleurs

Pour chaque parcelle, appelez plt.plot() avec dates2019 et sp2019 . Ensuite, définissez color (ou c ) à votre choix

# Blue (the default value)
plt.plot(dates2019, sp2019, color='b')

# Red
plt.plot(dates2019, sp2019, color='r')

# Green
plt.plot(dates2019, sp2019, c='g')

# Black
plt.plot(dates2019, sp2019, c='k')

Matplotlib Line Plot Multiple Lines

Si vous dessinez plusieurs tracés linéaires à la fois, matplotlib les colore différemment. Cela facilite la reconnaissance des différents ensembles de données.

Traçons l'indice S&P500 pour 2018 et 2019 sur un graphique pour comparer ses performances mensuelles. Pour ce faire, faites deux plt.plot() appelle avant d'appeler le plt.show() .

plt.plot(sp2019)
plt.plot(sp2018)
plt.show()

Cela a l'air génial. Il est très facile de distinguer les lignes orange et bleue. Mais il y a deux problèmes :

  1. L'axe des dates n'affiche pas les dates
  2. Nous ne savons pas quelle ligne correspond à quelle année.

Libellé de l'axe des x de Matplotlib

Pour résoudre le premier problème, nous devons renommer les nombres sur l'axe des x. Dans matplotlib, ils sont appelés x-ticks et nous utilisons donc le plt.xticks() fonction.

Il accepte deux arguments :plt.xticks(ticks, labels)

  • ticks – une liste de positions pour placer les ticks
  • labels – une liste d'étiquettes pour décrire chaque tick

Dans ce cas, les ticks sont [0, 50, 100, 150, 200, 250] et les étiquettes sont les mois de l'année.

plt.plot(sp2019)
plt.plot(sp2018)

# Create ticks and labels
ticks = [0, 50, 100, 150, 200, 250]
labels = ['Jan', 'Mar', 'May', 'Jul', 'Sep', 'Nov']

# Pass to xticks
plt.xticks(ticks, labels)
plt.show()

Découvrons maintenant quelle ligne correspond à quelle année.

Légende du tracé de ligne Matplotlib

Pour ajouter une légende, nous utilisons le plt.legend() fonction. Ceci est facile à utiliser avec des tracés linéaires.

Dans chaque plt.plot() appeler, étiquetez chaque ligne avec le label mot-clé. Lorsque vous appelez le plt.legend() , matplotlib dessinera une légende avec une entrée pour chaque ligne.

# Add label to 2019 plot
plt.plot(sp2019, label='2019')

# Add label to 2018 plot
plt.plot(sp2018, label='2018')

# Call plt.legend to display it
plt.legend()

plt.xticks(ticks, labels)
plt.show()

Parfait. Nous avons maintenant une parcelle terminée. Nous savons ce que représentent tous les axes et savons quelle ligne est laquelle. Vous pouvez voir que 2019 a été une meilleure année presque tous les mois.

Par défaut, matplotlib dessine la légende dans le 'best' emplacement. Mais vous pouvez le définir manuellement en utilisant le loc mot-clé et l'une de ces 10 chaînes explicites :

  • 'upper right', 'upper left', 'upper center'
  • 'lower right', 'lower left', 'lower center'
  • 'center right', 'center left'
  • 'right' ou 'center' (pour une raison quelconque, 'left' n'est pas une option)

Voici quelques exemples de placement de la légende à différents endroits

La meilleure pratique consiste à placer votre légende à un endroit où elle n'obstrue pas l'intrigue.

Style de ligne Matplotlib

Vous pouvez choisir parmi plusieurs styles de lignes. Ils sont définis avec le linestyle ou ls mot clé en plt.plot() .

Leur syntaxe est intuitive et facile à retenir. Voici les nombres carrés avec tous les styles de lignes possibles,

Pour chaque parcelle, appelez plt.plot(squared) et définissez linestyle ou ls à votre choix

# Solid (default)
plt.plot(squared, linestyle='-')

# Dashed
plt.plot(squared, linestyle='--')

# Dashdot
plt.plot(squared, ls='-.')

# Dotted
plt.plot(squared, ls=':')

Vous pouvez également transmettre les noms de style de ligne au lieu de la chaîne de forme courte. Les éléments suivants sont équivalents :

  • 'solid' ou '-'
  • 'dashed' ou '--'
  • 'dashdot' ou '-.'
  • 'dotted' ou ':'

Épaisseur de ligne Matplotlib

Vous pouvez définir l'épaisseur de ligne sur n'importe quelle valeur flottante en la passant au linewidth ou lw mot clé en plt.plot() .

Voici les nombres carrés avec différentes largeurs de ligne. Des nombres plus petits signifient des lignes plus fines.

plt.plot(squared, linewidth=1)

plt.plot(squared, linewidth=3.25)

plt.plot(squared, lw=10)

plt.plot(squared, lw=15.35)

Largeur de ligne Matplotlib

Vous pouvez définir la largeur de ligne sur n'importe quelle valeur flottante en la passant au linewidth ou lw mot clé en plt.plot() .

Voici les nombres carrés avec différentes largeurs de ligne

Tracé linéaire Matplotlib avec marqueurs

Par défaut, plt.plot() relie chacune des valeurs par une ligne et ne met pas en surbrillance les points individuels. Vous pouvez les mettre en évidence avec le marker mot-clé.

Vous avez le choix entre plus de 30 marqueurs intégrés. De plus, vous pouvez utiliser n'importe quelle expression LaTeX et même définir vos propres formes. Nous couvrirons les plus courants.

Comme la plupart des choses dans matplotlib, la syntaxe est intuitive. Soit la forme de la chaîne reflète la forme du marqueur, soit la chaîne est une seule lettre qui correspond à la première lettre de la forme.

  • 'o' – cercle
  • '^' – triangle vers le haut
  • 's' – carré
  • '+' – plus
  • 'D' – diamant
  • '$...$' – Syntaxe LaTeX, par ex. '$\pi$' fait de chaque marqueur la lettre grecque π.

Voyons quelques exemples

Pour chaque parcelle, appelez plt.plot(squared) et définissez marker à votre choix

# Circle
plt.plot(squared, marker='o')

# Plus
plt.plot(squared, marker='+')

# Diamond
plt.plot(squared, marker='D')

# Triangle Up
plt.plot(squared, marker='^')

Si vous définissez linestyle='' , vous ne tracerez pas de ligne, juste les marqueurs.

# Circle
plt.plot(squared, marker='o', linestyle='')

# Plus
plt.plot(squared, marker='+', linestyle='')

# Diamond
plt.plot(squared, marker='D', linestyle='')

# Triangle Up
plt.plot(squared, marker='^', linestyle='')

Chaînes de format de tracé de ligne Matplotlib

Définir le marqueur, le style de ligne et la couleur d'un tracé est quelque chose que vous voulez faire tout le temps. Donc, matplotlib a inclus un moyen rapide de le faire

plt.plot(y, fmt)

# with x-axis values
plt.plot(x, y, fmt)

Après avoir passé les valeurs de l'axe des ordonnées et/ou de l'axe des x, vous pouvez passer fmt . C'est une chaîne composée de trois parties :

fmt = '[marker][line][color]'

Chaque partie est facultative et vous pouvez les passer dans n'importe quel ordre. Vous pouvez utiliser les marqueurs de forme courte, les styles de ligne et les couleurs dont nous avons parlé dans cet article. Par exemple, 'o--g' est des marqueurs de cercle, des lignes pointillées et une couleur verte.

# These are equivalent
plt.plot(x, y, 'o--g')
plt.plot(x, y, marker='o', linestyle='--', color='g')
plt.plot(x, y, marker='o', ls='--', c='g')

Voici quelques exemples avec différents marqueurs, styles de lignes et couleurs.

# Circles, dash line, red 'o--r'
plt.plot(squared, 'o--r')

# Plus, dashdot line, green '+-.g'
plt.plot(squared, '+-.g')

# Diamonds, solid line, black 'D-k'
plt.plot(squared, 'D-k')

# Triangle up, dot line, blue 'b:^'
plt.plot(squared, 'b:^')

Si vous ne spécifiez pas de style de ligne dans la chaîne de format, matplotlib ne tracera pas de ligne. Cela rend vos tracés similaires à un nuage de points. Pour cette raison, certaines personnes préfèrent utiliser plt.plot() plus de plt.scatter() . Le choix vous appartient.

Résumé

Vous connaissez maintenant tous les éléments essentiels pour créer des tracés linéaires efficaces et d'aspect professionnel.

Vous pouvez changer la couleur et tracer plusieurs lignes les unes sur les autres. Vous pouvez écrire des étiquettes personnalisées pour les axes et le titre. Vous êtes capable d'expliquer clairement différentes lignes à l'aide d'une légende. Et vous pouvez personnaliser l'apparence de votre tracé en utilisant la couleur, la largeur de ligne, les marqueurs et les styles de ligne.

Où aller à partir d'ici ?

Voulez-vous gagner plus d'argent? Êtes-vous dans un emploi sans issue 9-5? Vous rêvez de vous libérer et de coder à temps plein, mais vous ne savez pas par où commencer ?

Devenir codeur à temps plein fait peur. Il y a tellement d'informations de codage là-bas que c'est écrasant.

La plupart des tutoriels vous enseignent Python et vous disent d'obtenir un emploi à temps plein.

C'est bien, mais pourquoi voudriez-vous un autre travail de bureau ?

Vous n'avez pas soif de liberté ? Vous n'avez pas envie de parcourir le monde ? Vous ne voulez pas passer plus de temps avec vos amis et votre famille ?

Il n'y a pratiquement pas de tutoriels qui vous enseignent Python et comment être votre propre patron. Et il n'y en a aucun qui vous apprend à faire six chiffres par an.

Jusqu'ici.

Je suis un pigiste Python à temps plein. Je travaille 4 heures par jour de n'importe où dans le monde. Je fixe mon horaire et mon taux horaire. Mon calendrier est complet des mois à l'avance et j'ai un flux constant de nouveaux clients.

Cela semble trop beau pour être vrai, non ?

Pas du tout. Je veux vous montrer les étapes exactes que j'ai utilisées pour arriver ici. Je veux te donner une vie de liberté. Je veux que tu sois un codeur à six chiffres.

Cliquez sur le lien ci-dessous pour regarder mon webinaire sur la valeur pure. Je vais vous montrer les étapes exactes pour vous emmener d'où vous êtes à un pigiste Python à temps plein. Ce sont des méthodes éprouvées, sans BS, qui vous permettent d'obtenir des résultats rapidement.

https://blog.finxter.com/become-python-freelancer-course/

Peu importe que vous soyez un novice Python ou un pro Python. Si vous ne gagnez pas six chiffres par an avec Python en ce moment, vous apprendrez quelque chose de ce webinaire.

Ce webinaire ne sera pas en ligne pour toujours. Cliquez sur le lien ci-dessous avant que les places ne se remplissent et découvrez comment devenir un pigiste Python.

Références

  • https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.plot.html
  • https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.xticks.html
  • https://matplotlib.org/gallery/lines_bars_and_markers/line_styles_reference.html
  • https://fred.stlouisfed.org/series/SP500/
  • https://blog.finxter.com/how-to-work-with-dates-and-times-in-python/
  • https://seaborn.pydata.org/tutorial/color_palettes.html
  • https://matplotlib.org/3.1.0/tutorials/colors/colors.html#xkcd-colors
  • https://matplotlib.org/3.1.0/gallery/color/named_colors.html