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

Python Discussion :

dans matplotlib scatter comment zoomer ou aller à un point spécifique


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    ngénieur d'etat en science géodésique et travaux topographique
    Inscrit en
    Septembre 2016
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : ngénieur d'etat en science géodésique et travaux topographique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2016
    Messages : 152
    Par défaut dans matplotlib scatter comment zoomer ou aller à un point spécifique
    dans matplotlib scatter comment zoomer ou aller à un point spécifique en donnant les coordonnées de ce point ou le nom du point

    Nom : j3LfQ.png
Affichages : 733
Taille : 57,9 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    from PyQt5.QtWidgets import QMainWindow, QApplication, QPushButton,QLineEdit
    from PyQt5 import QtCore, QtGui
    import sys
    from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
    from matplotlib.figure import Figure
    import numpy as np
    import pandas as pd
    class Window(QMainWindow):
        def __init__(self):
            super().__init__()        
            title = "Find or zoom to point"
            top = 400
            left = 400
            width = 900
            height = 550
            self.setWindowTitle(title)
            self.setGeometry(top, left, width, height)
            self.MyUI()
        def MyUI(self):
            self.canvas = Canvas(self, width=8, height=4)  
            self.canvas.move(0,0)        
            line_edit1 = QLineEdit("entre x", self)
            line_edit1.move(100, 430)
            line_edit2 = QLineEdit("entre y", self)
            line_edit2.move(100, 470)
            line_edit3 = QLineEdit("entre point name", self)
            line_edit3.move(380, 450)
            button1 = QPushButton("Find(zoom) by coordinate", self)
            button1.setGeometry(QtCore.QRect(200, 430, 135, 70))
            button2 = QPushButton("Find(zoom) by point name", self)
            button2.setGeometry(QtCore.QRect(480, 450, 135, 30)) 
    class Canvas(FigureCanvas):
        def __init__(self, parent = None, width = 5, height = 5, dpi = 100):
            fig = Figure(figsize=(width, height), dpi=dpi)
            self.axes = fig.add_subplot(111)
            FigureCanvas.__init__(self, fig)
            self.setParent(parent)
            self.plot()
        def plot(self):
            data={'point_name':["A","B","C","D","E"]
                  ,'x':[12,18,25,42,9],'y':[9,15,2,23,5]}
            df = pd.DataFrame(data)        
            ax = self.figure.add_subplot(111)
            ax.scatter(df['x'],df['y'])
            labels=list(df.point_name)
            xlabel=list(df.x)
            ylabel=list(df.y)
            for i, txt in enumerate(labels):
                    ax.annotate(txt,(xlabel[i],ylabel[i]))
    app = QApplication(sys.argv)
    window = Window()
    window.show()

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Salut,

    Ça a l'air intéressant d’après l'image, j'ai voulu tester mais cela ne fonctionne pas chez moi, il doit manquer des choses au code que tu as posté, non ?

  3. #3
    Membre confirmé
    Homme Profil pro
    ngénieur d'etat en science géodésique et travaux topographique
    Inscrit en
    Septembre 2016
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : ngénieur d'etat en science géodésique et travaux topographique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2016
    Messages : 152
    Par défaut
    Le code fonctionne bien, mais le composant zoom est manquant, et c'est ce que je recherche

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Citation Envoyé par rabeh.ram Voir le message
    Le code fonctionne bien,...
    Tu parles de quel code ? Celui que tu as posté ?

    Citation Envoyé par rabeh.ram Voir le message
    ..., mais le composant zoom est manquant, et c'est ce que je recherche
    Ouais mais en général c'est plus facile d'aider si on a le bon code, là avec le code que tu as posté je n'obtiens pas grand chose...

  5. #5
    Membre confirmé
    Homme Profil pro
    ngénieur d'etat en science géodésique et travaux topographique
    Inscrit en
    Septembre 2016
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : ngénieur d'etat en science géodésique et travaux topographique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2016
    Messages : 152
    Par défaut
    Oui, le code que j'ai partagé fonctionne bien et me donne la fenêtre dans l'image ci-dessus , je ne sais pas où est l'erreur

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Citation Envoyé par rabeh.ram Voir le message
    Oui, le code que j'ai partagé fonctionne bien et me donne la fenêtre dans l'image ci-dessus , je ne sais pas où est l'erreur
    Si vous voulez "zoomer" une partie du "plot", commencez par chercher sur internet avec par exemple les mots clefs: "matplotlib zoom in subplot". On n'est pas là pour faire votre boulot!

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Salut,

    Citation Envoyé par rabeh.ram Voir le message
    Oui, le code que j'ai partagé fonctionne bien et me donne la fenêtre dans l'image ci-dessus , je ne sais pas où est l'erreur
    J'ai trouvé, il manque bien une instuction... Ca marche en ajoutant par exemple ceci : app.exec_() à la fin...

    Citation Envoyé par rabeh.ram Voir le message
    Je cherche dans zoom a point spécifique ; c'est ce que je n'ai pas trouvé dans toutes mes recherches sur Internet
    J'ai ajouté une petite fonction qui s’exécute lorsqu'on clique sur le bouton "Find(zoom) by point name"... On obtient bien un zoom autour du point choisi mais là ça ne joue pas beaucoup car il n'y a pas beaucoup de points, les points sont assez éloignés les uns des autres. Cette fonction serait plus utile dans le cas où on aurait plus de points proches les uns des autres...

    Je n'ai pas fait l'autre fonction (celle pour le bouton "Find(zoom) by coordinate"), je te laisse la faire, elle est moins difficile...

    C'est juste un exemple (qui vaut ce qu'il vaut) pour aider un peu, à toi de l'améliorer si besoin est :

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    from PyQt5.QtWidgets import QMainWindow, QApplication, QPushButton, QLineEdit
    from PyQt5 import QtCore, QtGui
    import sys
    from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
    from matplotlib.figure import Figure
    import numpy as np
    import pandas as pd
     
     
    class Window(QMainWindow):
        def __init__(self):
            super().__init__()
            title = "Find or zoom to point"
            top = 400
            left = 400
            width = 900
            height = 550
            self.setWindowTitle(title)
            self.setGeometry(top, left, width, height)
            self.MyUI()
     
        def MyUI(self):
            self.canvas = Canvas(self, width=8, height=4)
            self.canvas.move(0, 0)
            line_edit1 = QLineEdit("entre x", self)
            line_edit1.move(100, 430)
            line_edit2 = QLineEdit("entre y", self)
            line_edit2.move(100, 470)
            self.line_edit3 = QLineEdit("entre point name", self)  # Ajout/Modif
            self.line_edit3.move(380, 450)  # Ajout/Modif
            button1 = QPushButton("Find(zoom) by coordinate", self)
            button1.setGeometry(QtCore.QRect(200, 430, 135, 70))
     
            button2 = QPushButton("Find(zoom) by point name", self)
            button2.setGeometry(QtCore.QRect(480, 450, 135, 30))
            button2.clicked.connect(self.zoom_lettre)  # Ajout/Modif
     
        def zoom_lettre(self):        
     
            lettre = self.line_edit3.text().upper()
            if lettre not in self.canvas.data["point_name"]:
                print("ce point n'existe pas !!!")
                return
     
            indice_lettre = self.canvas.data["point_name"].index(lettre)
            x_lettre = self.canvas.data["x"][indice_lettre]
            y_lettre = self.canvas.data["y"][indice_lettre]
            print(x_lettre, y_lettre)
     
            self.canvas.ax.set_xlim(x_lettre-1, x_lettre+1)
            self.canvas.ax.set_ylim(y_lettre-1, y_lettre+1)
     
            self.canvas.draw()
     
     
    class Canvas(FigureCanvas):
        def __init__(self, parent=None, width=5, height=5, dpi=100):
            fig = Figure(figsize=(width, height), dpi=dpi)
            self.axes = fig.add_subplot(111)
            FigureCanvas.__init__(self, fig)
            self.setParent(parent)
            self.plot()
     
        def plot(self):
            self.data = {'point_name': ["A", "B", "C", "D", "E"], 'x': [
                12, 18, 25, 42, 9], 'y': [9, 15, 2, 23, 5]}
            df = pd.DataFrame(self.data)
            self.ax = self.figure.add_subplot(111)
            self.ax.scatter(df['x'], df['y'])
            labels = list(df.point_name)
            xlabel = list(df.x)
            ylabel = list(df.y)
            for i, txt in enumerate(labels):
                self.ax.annotate(txt, (xlabel[i], ylabel[i]))
     
     
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    app.exec_()

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

Discussions similaires

  1. [Graphics View] Comment zoomer dans un QGraphicsView par un bouton ?
    Par Karimce dans le forum Qt
    Réponses: 1
    Dernier message: 17/10/2016, 13h27
  2. Réponses: 0
    Dernier message: 15/08/2011, 15h15
  3. [Syntaxe] Un return dans un try... Comment faire ?
    Par chuky dans le forum Général Java
    Réponses: 13
    Dernier message: 14/01/2005, 10h33
  4. namespace dans feuille xslt : comment ca marche exactement ?
    Par guipom dans le forum XSL/XSLT/XPATH
    Réponses: 13
    Dernier message: 11/11/2004, 16h21
  5. Réponses: 14
    Dernier message: 01/09/2003, 22h46

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