IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Calcul scientifique Python Discussion :

scipy, find_peaks : problème pour positionner le peak-picking sur le plot(x,y) [Python 3.X]


Sujet :

Calcul scientifique Python

  1. #1
    Membre régulier
    Homme Profil pro
    Amateur débutant
    Inscrit en
    Décembre 2019
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Amateur débutant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 88
    Points : 104
    Points
    104
    Par défaut scipy, find_peaks : problème pour positionner le peak-picking sur le plot(x,y)
    Bonjour,

    J'ai un fichier filexy.xlsx avec une colonne 'angle' (les x) et une colonne 'counts' (les y .. c'est un diffractogramme).

    Pour faire le graphe je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    from scipy.signal import find_peaks
     
    filexy = pd.read_excel('filexy.xlsx')
     
    x = filexy['angle']
    y = filexy['counts']
     
    plt.figure(figsize=(16,8))
    plt.plot(x,y, c='b')
    On voit bien l'abscise allant de 0 à 50 avec le graphe commençant à 5.

    Puis, pour trouver les pics:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    peaks, _ = find_peaks(y, prominence=50)
    Puis, pour afficher le graphe + le peak-picking, si je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    # afficher le graphe avec les pics trouvés (peak-picking)
    plt.figure(figsize=(16,8)) 
    plt.plot(y)
    plt.plot(peaks, y[peaks], "vr")
    ca affiche bien le peak-picking sur la courbe, mais mon abscisse est perdue au profit du nombre de points selon x

    => Comment faire pour afficher le graphe comme il faut avec les peak-picking ET l'abscisse de 0 à 50?
    Merci pour toute aide.

    PS:
    J'ai bien essayé des trucs mais j'arrive à:
    un graphe écrasé de 0 à 50 et le peak-picking étalé jusqu'a 3184 (nombre de valeurs),
    des problèmes de tableaux de dimensions non concordantes,
    des peak-pickings a ras du sol,
    des graphes sans le peak-picking visible..

    Bref il me serait bien utile que vous puisiez m'expliquer ce que je fais mal
    (et que j'arrête de faire n'importe quoi par manque de compréhension des retours de find_peaks()..entre autre

  2. #2
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    654
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 654
    Points : 1 150
    Points
    1 150
    Par défaut
    Salut,

    Je n'ai pas essayé, mais peaks est une liste d'indices, les indices i de y où sont les pics. Donc faire plt.plot(peaks, y[peaks], "vr") doit nécessairement donner un graph avec en abscisse des entiers totalement différents de x. Il faudrait je pense faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plt.plot(x[peaks], y[peaks], "vr")
    J

  3. #3
    Membre régulier
    Homme Profil pro
    Amateur débutant
    Inscrit en
    Décembre 2019
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Amateur débutant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 88
    Points : 104
    Points
    104
    Par défaut
    Citation Envoyé par Julien N Voir le message
    peaks est une liste d'indices, .
    Mais..bon sang mais oui !! ..
    Citation Envoyé par Julien N Voir le message
    peaks faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plt.plot(x[peaks], y[peaks], "vr")
    Ca marche parfaitement
    Merci encore Julien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. SFTP problème pour positionner les droits
    Par vallica dans le forum Administration système
    Réponses: 2
    Dernier message: 14/06/2009, 09h26
  2. Problème pour positionner des blocs
    Par Gizmil dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 09/11/2007, 01h32
  3. probléme pour positionner une infobulle
    Par stars333 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 06/06/2007, 11h46
  4. Problème de positionnement avec le Picking
    Par DestinyWar45 dans le forum OpenGL
    Réponses: 5
    Dernier message: 15/12/2006, 20h34
  5. Problème pour positionner une liste déroulante
    Par ouckileou dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 30/09/2004, 01h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo