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 :

'Shifter' une figure avec ses coordonnées


Sujet :

Python

  1. #1
    Membre averti Avatar de MariettaUARK
    Femme Profil pro
    Post-doc
    Inscrit en
    Janvier 2020
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Post-doc
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2020
    Messages : 15
    Par défaut 'Shifter' une figure avec ses coordonnées
    Bonjour,

    J'ai une figure dont les coordonnées des abscisses vont de 0 à 360 et je voudrais la centrer sur 0 et non sur 180.
    Le souci c'est que je n'arrive pas à décaler la matrice de points en même temps que les valeurs de l'axe des abscisses et donc les valeurs de la carte ne sont plus en adéquation avec ses coordonnées.
    Ce n'est pas forcément clair, voilà le code :

    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
    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
     
    data = 'goossens_datamap.csv' 
     
    # importation de la matrice de données
    contour_data = pd.read_csv(data, skiprows=0) # importation du fichier de données au format 3 colonnes x,y,z
    contour_data.astype(float) 
    Mat_d = contour_data.pivot_table(index='x', columns='y', values='z').T.values # conversion colonne => matrice 'numpy.ndarray'
     
    # Création des valeurs de longitude et latitude
    x = np.linspace(0, 360, np.shape(Mat_d)[1])
    y = np.linspace(-90, 90, np.shape(Mat_d)[0])
     
    #Affichage
    implot = plt.imshow(Mat_d, extent=[x[0],x[-1],y[0],y[-1]], origin={'lower', 'lower'}, cmap='jet', interpolation='blackman')
    plt.xlabel('Longitude [°]')
    plt.ylabel('Latitude [°]')
     
    plt.show()
    Est-il possible de décaler toute la carte de 180x ? (cela revient concrètement à inverser les deux moitiés droite et gauche de la carte, ce qui peut être un début de solution : bidouiller les données de départ, pas très élégant mais incontestablement efficace)

    Vous noterez que je crée un peu 'artificiellement' les x et y alors qu'il sont aussi contenus dans les 1ère et 2ème colonnes du fichier d'origine.

    Merci.
    - M.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Vagabong étudiant en annalyse du signal.
    Inscrit en
    Avril 2019
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Vagabong étudiant en annalyse du signal.
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2019
    Messages : 130
    Par défaut
    Pouvez-vous joindre le fichier csv, de façon à ce que l'on puisse tester votre code pour mieux comprendre ce qu'il fait.
    Les gens forts n'en n'ont pas forcément besoin mais personnellement, ça me serai bien utile, ne serait-ce que pour comprendre votre question.

  3. #3
    Membre averti Avatar de MariettaUARK
    Femme Profil pro
    Post-doc
    Inscrit en
    Janvier 2020
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Post-doc
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2020
    Messages : 15
    Par défaut
    Voilà le lien du fichier (je ne peux pas le déposer directement ici, le site n'accepte pas les csv, et même en .txt ou .dat de toute façon le fichier est trop lourd)

    https://owen.link/05e6977431avc64dk9...063b6#bZpJWD7H

  4. #4
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut


    Et comme cela ?

    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
    data = 'Tests/en_cours/goossens_datamap.csv'
     
    # importation de la matrice de données
    # importation du fichier de données au format 3 colonnes x,y,z
    contour_data = pd.read_csv(data, skiprows=0)
    contour_data.astype(float)
     
    # conversion colonne => matrice 'numpy.ndarray'
    Mat_d = contour_data.pivot_table(index='x', columns='y', values='z').T.values
     
    # Création des valeurs de longitude et latitude
    x = np.linspace(-180, 180, np.shape(Mat_d)[1])
    y = np.linspace(-90, 90, np.shape(Mat_d)[0])
     
    # Affichage
    plt.imshow(Mat_d, extent=[x[0], x[-1], y[0], y[-1]],
               origin={'lower', 'lower'}, cmap='jet', interpolation='blackman')
     
    plt.xlabel('Longitude [°]')
    plt.ylabel('Latitude [°]')
     
    plt.xlim(-50, 100)
    plt.ylim(-40, 60)
     
    plt.show()

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  5. #5
    Membre éprouvé
    Homme Profil pro
    Vagabong étudiant en annalyse du signal.
    Inscrit en
    Avril 2019
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Vagabong étudiant en annalyse du signal.
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2019
    Messages : 130
    Par défaut
    Je ne maîtrise pas bien les matrices numpy, mais en passant par les listes je m'en sort.
    Je suis d'accord avec la solution de danielhagnoul mais si tu veux garder un axe allant de 0 a 360, en inversant comme tu dis les 2 moitiers.
    Il y a un moyen qui est celui là:
    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
     
    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
     
    data = 'goossens_datamap.csv' 
     
    # importation de la matrice de données
    contour_data = pd.read_csv(data, skiprows=0) # importation du fichier de données au format 3 colonnes x,y,z
    contour_data.astype(float) 
    Mat_d = contour_data.pivot_table(index='x', columns='y', values='z').T.values # conversion colonne => matrice 'numpy.ndarray'
     
    # Création des valeurs de longitude et latitude
    x = np.linspace(0, 360, np.shape(Mat_d)[1])
    y = np.linspace(-90, 90, np.shape(Mat_d)[0])
     
    #Affichage
    Mat_d = [list(ligne) for ligne in Mat_d]  # je transforme l'array en liste
    Mat_d = [ligne[len(ligne)//2:] + ligne[:len(ligne)//2] for ligne in Mat_d] # ensuite je bidouille les liste pour inverser les moitiers
    implot = plt.imshow(Mat_d, extent=[x[0], x[-1], y[0], y[-1]], origin={'lower', 'lower'}, cmap='jet', interpolation='blackman')
    plt.xlabel('Longitude [°]')
    plt.ylabel('Latitude [°]')
     
    plt.show()

  6. #6
    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,

    Waw, comment vous avez fait pour télécharger le fichier ?
    En ce qui me concerne le site se fiche de moi...

    J'ai cliqué puis il me dit :

    Félicitations !

    Vos fichiers ont bien été téléchargés, vous les retrouverez dans votre dossier de téléchargement habituel.
    Mais j'ai rien !!!

  7. #7
    Membre éprouvé
    Homme Profil pro
    Vagabong étudiant en annalyse du signal.
    Inscrit en
    Avril 2019
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Vagabong étudiant en annalyse du signal.
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2019
    Messages : 130
    Par défaut
    Waw, comment vous avez fait pour télécharger le fichier ?
    Je n'ai personnellement aucun souci (firefox linux).
    Voila un lien weetransfère si ça peu aider: https://we.tl/t-0Kax7UM7YK

  8. #8
    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,
    Merci cette fois c'est bon...

  9. #9
    Membre averti Avatar de MariettaUARK
    Femme Profil pro
    Post-doc
    Inscrit en
    Janvier 2020
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Post-doc
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2020
    Messages : 15
    Par défaut
    Merci à tout le monde pour votre aide.

    @danielhagnoul, ton code fait un zoom sur une région de la carte (celle avec le spot) : en fait quand j'ai dit que je voulais centrer ma carte, ce n'était pas de la centrer sur le spot mais sur le méridien zéro.

    @robinechuca, oui ton code permet bien d'inverser les deux moitiés de ma carte donc je vais faire comme ça en attendant merci. Ce qui m'embête c'est qu'ici j'ai juste de la chance d'avoir besoin d'un décalage de 180° ce qui correspond à l'inversion des deux moitiés de la carte mais pour des décalages de degrés différents j'aurai à nouveau le souci... Mais à chaque jour suffit sa peine =) Je prends ta solution.

    @Begginer, désolée pour ta difficulté à télécharger les data, je ne sais pas d'où ça venait. Merci robinechuca d'avoir remis un lien.

  10. #10
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Si le zoom ne vous intéresse pas, il suffit de le supprimer en enlevant ces deux lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    plt.xlim(-50, 100)
    plt.ylim(-40, 60)

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  11. #11
    Membre averti Avatar de MariettaUARK
    Femme Profil pro
    Post-doc
    Inscrit en
    Janvier 2020
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Post-doc
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2020
    Messages : 15
    Par défaut
    Citation Envoyé par danielhagnoul Voir le message
    Si le zoom ne vous intéresse pas, il suffit de le supprimer en enlevant ces deux lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    plt.xlim(-50, 100)
    plt.ylim(-40, 60)

    Oui mais hormis ça, ici seules les valeurs de l'axe des longitudes ont été changées, et la figure reste à la même place, c'était bien mon problème.

Discussions similaires

  1. [GMF] Mise à jour d'un champ d'une figure avec JFileChooser
    Par mimo2011 dans le forum Eclipse Modeling
    Réponses: 0
    Dernier message: 24/02/2011, 12h45
  2. Restauration d'une base avec ses journaux
    Par dari68 dans le forum Administration
    Réponses: 12
    Dernier message: 13/08/2010, 14h42
  3. gerer taille d'une figure avec 3 subplot
    Par Krokro00 dans le forum MATLAB
    Réponses: 2
    Dernier message: 13/06/2008, 14h55
  4. Expression regulière pour relever une URL avec ses paramètres
    Par Immobilis dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 15/03/2008, 16h52
  5. Dessiner une figure avec graphics.h
    Par Firas_tn dans le forum C
    Réponses: 2
    Dernier message: 29/03/2006, 20h33

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