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 :

Soucis grid matplotlib


Sujet :

Python

  1. #1
    Membre du Club
    Inscrit en
    Mai 2011
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 72
    Points : 49
    Points
    49
    Par défaut Soucis grid matplotlib
    Bonjour à tous

    J'ai un petit soucis sous matplotlib. J'ai un subplot comme ceci :

    Nom : figure_1.png
Affichages : 840
Taille : 106,4 Ko

    Pourquoi n'ai-je pas la grille complete pour le plot d'en bas (minor grid ok mais major grid absente) ?

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib.dates as mdates
    import datetime
    from matplotlib.dates import strpdate2num
    from matplotlib.ticker import AutoMinorLocator
     
    minorLocator = AutoMinorLocator()
     
    y = np.loadtxt ('t.txt')
    z = np.loadtxt ('h.txt')
    x = np.loadtxt('d.txt',comments='#', delimiter='\t', converters = { 0 : strpdate2num('%Y-%m-%d %H:%M:%S') }, dtype=None)
    np.putmask(y, y<20, np.nan)
    np.putmask(y, y>50, np.nan)
    np.putmask(z, z>98, np.nan)
    np.putmask(z, z<20, np.nan)
     
    plt.style.use('seaborn-white')
    #plt.style.use('fivethirtyeight')
    #plt.style.use('seaborn-white')
     
    #plt.rcParams['font.family'] = 'serif'
    #plt.rcParams['font.serif'] = 'Ubuntu'
    #plt.rcParams['font.monospace'] = 'Ubuntu Mono'
    plt.rcParams['font.size'] = 10
    plt.rcParams['axes.labelsize'] = 10
    plt.rcParams['axes.labelweight'] = 'bold'
    plt.rcParams['axes.titlesize'] = 10
    plt.rcParams['xtick.labelsize'] = 12
    plt.rcParams['ytick.labelsize'] = 12
    plt.rcParams['legend.fontsize'] = 10
    plt.rcParams['figure.titlesize'] = 18
     
    fig = plt.figure(figsize=(20,10))
    #plt.subplot(2,1,1)
     
    ax1 = fig.add_subplot(2,1,1,)
    ax1.xaxis.set_minor_locator(minorLocator)
     
    ax1.legend(loc=4, fontsize=10)
    plt.setp(ax1.get_xticklabels(), visible=False)
    plt.tick_params(which='both', width=2)
    plt.tick_params(which='major', length=7)
    plt.tick_params(which='minor', length=4)
    plt.grid(b=True, which='both', color='0.65',linestyle='--')
    ax1.xaxis.set_major_formatter(mdates.DateFormatter('%d/%m/%Y %H:%M'))
    ax1.yaxis.grid(True, which='major')
    ax1.yaxis.grid(True, which='minor')
    ax1.get_xaxis().tick_bottom()    
    ax1.get_yaxis().tick_left()
     
    ax1.plot(x, y, 'k-', linewidth=1)
     
    ax2 = fig.add_subplot(2,1,2)
    ax2.xaxis.set_minor_locator(minorLocator)
    plt.setp(ax2.get_xticklabels(), fontsize=14,rotation=30)
    plt.tick_params(which='both', width=2)
    plt.tick_params(which='major', length=7)
    plt.tick_params(which='minor', length=4)
    plt.grid(b=True, which='both', color='0.65',linestyle='--')
    ax2.grid(True)
     
    ax2.xaxis.set_major_formatter(mdates.DateFormatter('%d/%m/%Y %H:%M'))
    ax2.yaxis.grid(True, which='both')
    ax2.xaxis.grid(True, which='major')
    ax2.yaxis.grid(True, which='minor')
    ax2.get_xaxis().tick_bottom()    
    ax2.get_yaxis().tick_left()
    ax2.plot(x, z, 'r-', linewidth=1)
     
    plt.grid()
    plt.show()
    En vous remerciant par avance

  2. #2
    bm
    bm est déconnecté
    Membre confirmé

    Homme Profil pro
    Freelance
    Inscrit en
    Octobre 2002
    Messages
    874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Freelance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2002
    Messages : 874
    Points : 556
    Points
    556
    Billets dans le blog
    6
    Par défaut
    Pour tester faudrait un fichier avec des points.


  3. #3
    Membre du Club
    Inscrit en
    Mai 2011
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 72
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par bm Voir le message
    Pour tester faudrait un fichier avec des points.

    voici un lien qui permet de telecharger les 3 petits fichiers nécessaire pour le script...

    https://www.transfernow.net/19etx2b3rr8w

  4. #4
    Membre du Club
    Inscrit en
    Mai 2011
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 72
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par yonafunu Voir le message
    voici un lien qui permet de telecharger les 3 petits fichiers nécessaire pour le script...

    https://www.transfernow.net/19etx2b3rr8w
    Personne pour m'aider ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Points : 482
    Points
    482
    Par défaut
    Bonjour,

    j'ai déjà été confronté à ce problème, le truc c'est que je ne me souviens plus comment l'avoir résolu.

    Je n'ai pas toutes les libs d'installées à la maison pour essayer.

    Il me semble que ça vient de fig.add_subplot

    Pour permettre de gérer le ratio des graphiques j'utilise gridspec.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    from matplotlib import pyplot, gridspec
     
    fig1 = pyplot.figure()
    plot_gs = list(gridspec.GridSpec(nrows=2, ncols=1, height_ratios=[8, 2]))
     
    subplot_1 = fig1.add_subplot(plot_gs.pop(0))
    ...
    subplot_2 = fig1.add_subplot(plot_gs.pop(0))
    ...

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Points : 482
    Points
    482
    Par défaut
    Bonjour,

    Je ne sais pas si depuis vous avez trouvé la solution, voici quand même :

    Encore une fois j'ai lu trop vite et ma réponse faite au dessus n'avait rien à voir avec votre problème.


    Pour faire fonctionner votre code il aurait été pratique de préciser votre version des librairies.

    Avec la configuration suivante :
    Python: 3.3.5 x86
    numpy: 1.10.4
    matplotlib: 1.4.3

    J'ai dû corriger/remplacer un peu la syntaxe pour que ça fonctionne chez moi.

    1: x = np.loadtxt('d.txt',comments='#', delimiter='\t', converters = { 0 : strpdate2num('%Y-%m-%d %H:%M:%S') }, dtype=None)
    TypeError: strptime() argument 0 must be str, not <class 'bytes'>

    2: plt.style.use('seaborn-white')
    FileNotFoundError: [Errno 2] No such file or directory: 'seaborn-white'

    3: plt.rcParams['axes.titlesize'] = 10
    KeyError: 'axes.titlesize'

    4: plt.rcParams['figure.titlesize'] = 18
    KeyError: 'figure.titlesize'
    loadtxt ouvre le fichier et retourne le texte brut en bytes et non en string comme doit le faire je suppose Python 2, ou tout du moins votre version.
    et du coup dans mon cas sans convertir au préalable le texte en str la fonction strpdate2num plante.



    Ensuite pour votre problème de grille principale.

    Le premier constat c'est le mélange des paramétrages généraux plt avec ceux des instances figures et axes/subplot.

    Je ne connais pas exactement la relation entre les deux, mais selon moi il vaut mieux configurer tout au départ les paramètres généraux applicables pour les futurs plots/figures puis configurer séparément les instances avec leurs attributs qui leurs sont propres.

    Le simple fait d'appeler plt.grid() tout à la fin change l'état du second axe/subplot, et supprime la grille.

    Pourquoi uniquement le second plot ? C'est sans doute lié au fait qu'on appelle fig.add_subplot entre les deux, mais ça reste une hypothèse et je ne maitrise pas ces paramétrages « non-pytonic » qui agit sur les instances de manière opaque.

    Voir cet exemple sur le site officiel : http://matplotlib.org/examples/pylab...atplotlib.html


    En changeant la syntaxe voici ce que j'obtiens :

    Pas trop eu le temps de me relire mais ça fonctionne à peu près pour l'exemple.

    Je viens de voir que j'ai utilisé la mauvaise syntaxe pour le plot1 (ax1) en voulant supprimer les labels de l'axe X j'ai supprimé les ticks de la grille.

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    # Python: 3.3.5 x86
    # numpy: 1.10.4
    # matplotlib: 1.4.3
     
    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib.dates as mdates
    import datetime
    from matplotlib.dates import strpdate2num
    from matplotlib.ticker import AutoMinorLocator
     
    minorLocator = AutoMinorLocator()
     
    y = np.loadtxt ('t.txt')
    z = np.loadtxt ('h.txt')
    def bytedate2num(fmt):
        def converter(b):
            return mdates.strpdate2num(fmt)(b.decode('ascii'))
        return converter
     
    x = np.loadtxt(
        'd.txt',
        comments='#',
        delimiter='\t',
        converters = { 0 : bytedate2num('%Y-%m-%d %H:%M:%S') },
        dtype=None,
    )
    np.putmask(y, y<20, np.nan)
    np.putmask(y, y>50, np.nan)
    np.putmask(z, z>98, np.nan)
    np.putmask(z, z<20, np.nan)
     
    #plt.style.use('seaborn-white')
    #plt.style.use('fivethirtyeight')
    #plt.style.use('seaborn-white')
     
    #plt.rcParams['font.family'] = 'serif'
    #plt.rcParams['font.serif'] = 'Ubuntu'
    #plt.rcParams['font.monospace'] = 'Ubuntu Mono'
    plt.rcParams['font.size'] = 10
    plt.rcParams['axes.labelsize'] = 10
    plt.rcParams['axes.labelweight'] = 'bold'
    #plt.rcParams['axes.titlesize'] = 10
    plt.rcParams['xtick.labelsize'] = 12
    plt.rcParams['ytick.labelsize'] = 12
    plt.rcParams['legend.fontsize'] = 10
    #plt.rcParams['figure.titlesize'] = 18
     
    fig = plt.figure(figsize=(20,10))
    fig.subplots_adjust(bottom=0.2)
     
    ax1 = fig.add_subplot(2, 1, 1)
    ax1.xaxis.set_minor_locator(minorLocator)
     
    ax1.legend(loc=4, fontsize=10)
    ax1.xaxis.set_major_formatter(mdates.DateFormatter('%d/%m/%Y %H:%M'))
    ax1.xaxis.set_ticks([]) # Mauvaise idée!
    ax1.xaxis.grid(True, which='both', color='0.65', linestyle='--')
    ax1.yaxis.grid(True, which='both', color='0.65', linestyle='--')
    ax1.get_xaxis().tick_bottom()    
    ax1.get_yaxis().tick_left()
    ax1.plot(x, y, 'k-', linewidth=1)
     
    ax2 = fig.add_subplot(2, 1, 2)
    ax2.xaxis.set_minor_locator(minorLocator)
     
    ax2.xaxis.set_ticklabels(ax2.xaxis.get_ticklabels(), fontsize=14, rotation=30)
    ax2.xaxis.set_major_formatter(mdates.DateFormatter('%d/%m/%Y %H:%M'))
    ax2.xaxis.grid(True, which='both', color='0.65', linestyle='--')
    ax2.yaxis.grid(True, which='both', color='0.65', linestyle='--')
    ax2.get_xaxis().tick_bottom()
    ax2.get_yaxis().tick_left()
    ax2.plot(x, z, 'r-', linewidth=1)
     
    plt.show()
    Et ça donne ceci :
    Nom : figure_2.png
Affichages : 699
Taille : 70,2 Ko

  7. #7
    Membre du Club
    Inscrit en
    Mai 2011
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 72
    Points : 49
    Points
    49
    Par défaut
    Super YCL-1 !! merci beaucoup pour ta réponse très détaillée

    Tout marche comme indiqué ! merci encore !

Discussions similaires

  1. Soucis avec ExtJS et Grids
    Par MortyDeath dans le forum Ext JS / Sencha
    Réponses: 2
    Dernier message: 21/11/2012, 20h50
  2. Réponses: 3
    Dernier message: 06/01/2010, 14h11
  3. Centrer un texte dans un string Grid
    Par christine dans le forum C++Builder
    Réponses: 5
    Dernier message: 22/10/2002, 22h33
  4. Réponses: 2
    Dernier message: 03/10/2002, 17h24
  5. String Grid et choix d'une couleur pour une ligne
    Par Gigottine dans le forum C++Builder
    Réponses: 12
    Dernier message: 17/05/2002, 15h23

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