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)


Sujet :

Calcul scientifique Python

  1. #1
    Membre du Club
    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 chevronné
    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
    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 chevronné
    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
    C'est bon j'ai compris

    Merci

###raw>template_hook.ano_emploi###