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 :

Matplotlib, avoir son propre style (couleurs ticks et valeurs de ticks) [Python 3.X]


Sujet :

Calcul scientifique Python

  1. #1
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    mai 2018
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : mai 2018
    Messages : 47
    Points : 40
    Points
    40
    Par défaut Matplotlib, avoir son propre style (couleurs ticks et valeurs de ticks)
    Bonjour,

    J'ai crée un module pour avoir mon propre style par défaut, que je range dans une variable self_style . J'importe ce module sur mes scripts utilisés pour faire des graphes

    J'ai besoin d'avoir mes ticks de couleur '#A9A9A9' ( une sorte de gris) et mes valeurs en dessous des ticks en noir et non en gris, pour des questions de lisibilité.


    Dans mon module de style, je pose donc :
    self_style['xtick.color'] = '#A9A9A9'
    self_style['ytick.color'] = '#A9A9A9'

    => Cela change mes couleurs de valeurs de ticks et les bars de ticks en '#A9A9A9'

    Je suis donc obligé de rajouter dans mon programme à chaque tracé :
    ax.tick_params(labelcolor='k')

    On a alors bien : tick et axe en gris, valeurs en noir



    - Est il possible de modifier cela dès le début dans mon module de style via la variable self_style ? Je ne le trouve pas et le but était de ne pas avoir à modifier ax.tick_params à chaque fois

    - Question bonus : Est ce la meilleurs façon de procéder ? J'ai vu qu'il y avait des fichiers .MPLSTYLE comme bmh, ou classic, ou ggplot. Mais je n'ai pas trouvé d'explications sur comment créer mon propre style

    Merci

    Kaz


    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
    import matplotlib.pyplot as plt
    import numpy as np
     
    self_style = plt.rcParams.copy()
    self_style['mathtext.fontset'] = 'custom'
    self_style['mathtext.it'] = 'Arial:italic'
    self_style['mathtext.rm'] = 'Arial'
     
    self_style['axes.spines.top'] = False
    self_style['axes.spines.right'] = False
     
    self_style['axes.edgecolor'] ='#A9A9A9'
    self_style['xtick.color'] = '#A9A9A9'
    self_style['ytick.color'] = '#A9A9A9'    
     
    plt.rcParams.update(self_style)
     
    if __name__ == '__main__':
        t = np.linspace(0.0, 2.0, 201)
        s = np.sin(2 * np.pi * t)
     
        fig, ax = plt.subplots()
        ax.plot(t, .7*s)
        ax.tick_params(labelcolor='k')
     
        plt.show()

  2. #2
    Membre expérimenté

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    mars 2013
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : mars 2013
    Messages : 808
    Points : 1 604
    Points
    1 604
    Par défaut
    Tu pourrais déjà définir cela dans un dictionnaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    self_style ={}
    self_style['mathtext.fontset'] = 'custom'
    self_style['mathtext.it'] = 'Arial:italic'
    self_style['mathtext.rm'] = 'Arial'
     
    self_style['axes.spines.top'] = False
    self_style['axes.spines.right'] = False
     
    self_style['axes.edgecolor'] ='#A9A9A9'
    self_style['xtick.color'] = '#A9A9A9'
    self_style['ytick.color'] = '#A9A9A9'
    Ainsi à chaque fois tu peux importer le dictionnaire et mettre à jour le style pyplot te prendra 1 ligne au lieu de 10.
    Sinon pour tes autres modules, au lieu d'import plt depuis matplotlib, importe le depuis ce module. Il devrait garder les configurations voulues.

  3. #3
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    mai 2018
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : mai 2018
    Messages : 47
    Points : 40
    Points
    40
    Par défaut
    Merci pour ton retour,

    ok pour pyplot, inutile de l'importer plus que nécessaire.

    Par contre je ne comprends pas encore pour le dictionnaire.

    tu n'utiliserais pas self_style = plt.rcParams.copy() au début du module style puis plt.rcParams.update(self_style) à la fin de celui ci ?

    Et dans mon main j'ai seulement l'importation de mon module de style

  4. #4
    Membre expérimenté

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    mars 2013
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : mars 2013
    Messages : 808
    Points : 1 604
    Points
    1 604
    Par défaut
    Citation Envoyé par Kazvert Voir le message
    tu n'utiliserais pas self_style = plt.rcParams.copy() au début du module style
    Tu n'as pas besoin d'avoir un dictionnaire complet de toute les clés de rcParams. Tu as juste besoin d'un dictionnaire des choses que tu veux mettre à jour.
    Regarde ce code pour comprendre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dico1={'a':0,'b':1}
    dico2={'a':7,'c':10}
    dico1.update(dico2)
    print(dico1)  ### dico1={'a':0,'b':1}
    Citation Envoyé par Kazvert Voir le message
    puis plt.rcParams.update(self_style) à la fin de celui ci ?
    Oui je garde ca dans chaque module. C'est la seule ligne qui reste.

  5. #5
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    mai 2018
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : mai 2018
    Messages : 47
    Points : 40
    Points
    40
    Par défaut
    C'est bon j'ai compris

    Merci

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

Discussions similaires

  1. Parmi 3 cellules, une seule peut avoir une valeur différente de 0.
    Par EricQ dans le forum Macros et VBA Excel
    Réponses: 24
    Dernier message: 07/07/2008, 16h46
  2. Avoir une signature différente chaque jour
    Par arnolem dans le forum Outlook
    Réponses: 0
    Dernier message: 05/03/2008, 18h49
  3. Contenu SStab, comment avoir comme unité de mesure le pixel ?
    Par uranium-design dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 21/10/2006, 20h02
  4. Réponses: 15
    Dernier message: 19/06/2006, 20h25
  5. [DTD] Avoir des fils différents
    Par david06600 dans le forum Valider
    Réponses: 2
    Dernier message: 01/12/2005, 16h33

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