Code source de xphs1903.afficher

from logging import getLogger

from .analyse import fft
from .defs import BRUT, FFT

logging = getLogger(__name__)

from matplotlib import pyplot as plt
from matplotlib.figure import Figure
from pandas import DataFrame


[docs] def plot(res: DataFrame, fig: Figure) -> None: """Mise à jour du graphique avec de nouvelles données. Met les graphiques contenus dans fig à jour avec les données de res. Parameters ---------- res Liste des mesures prises. Structurée en ``[t, pd1, pd2, ...]`` fig Figure contenant les différents graphiques """ logging.info('Dans la fonction plot(res=%r, fig=%r)', res, fig) fs, *fft_pd = fft(res) # Calculer la FFT ts = res.t.to_numpy() logging.debug('ts = %s', ts) # Python permet le paquetage/dépaquetage dans les définitions de variables # On peut par exemple définir les mêmes variables avec les mêmes valeurs # de plusieurs manières différentes: # # a = 1 a, b = 1, 2 # b = 2 # # Dans la boucle for qui suit, on utilise les fonctions # zip_ et enumerate_. zip_ permet d'itérer sur les valeurs de plusieurs # listes simultanément, et enumerate_ permet d'itérer sur les valeurs # et l'index d'une liste. Dans la boucle, on a donc: # # i: int = <index des éléments> # pd: list[float] = <données de la broche/photodiode i> # fpd: list[float] = <transformée de pd> for i, (pd, fpd) in enumerate(zip(res.columns[1:], fft_pd)): logging.debug('i=%s, pd=%r, fpd=%r', i, pd, fpd) # fig est la figure passée en argument # fig.axes est la liste des axes contenus dans la figure # fig.axes[0] est l'axe qu'on utilise pour les données brutes # fig.axes[1] est l'axe qu'on utilise pour la FFT # fig.axes[i].lines est la liste des courbes dessinées sur fig.axes[i] # fig.axes[i].lines[pd] est la courbe associée à la photodiode pd # fig.axes[i].lines[pd].set_ydata permet de modifier les valeurs en y # d'une courbe existante # fig.axes[i].lines[pd].get_ydata permet d'obtenir les valeurs en y # d'une courbe existante. # Afficher jusqu'aux 200 derniers points fig.axes[BRUT].lines[i].set_data(ts, res[pd].to_numpy()) fig.axes[BRUT].set_xlim(left=0, right=max(ts)) # Afficher la transformée de Fourier fig.axes[FFT].lines[i].set_data(fs, fpd) fig.axes[FFT].set_xlim(right=max(fs)) fig.axes[FFT].set_ylim(top=max(fpd)) # fig.axes[FFT].set_ylim(0, max(max(f) for f in fft_pd)) plt.pause(1**-64) # Petite pause pour permettre l'affichage correct
def tab(res: DataFrame, fig: Figure) -> DataFrame: logging.critical("%s.tab n'est pas implémenté.", __name__) raise NotImplementedError __all__ = [ 'plot', ]