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

Calcul scientifique Python Discussion :

Changer la largeur des traits dans une figure a posteriori


Sujet :

Calcul scientifique Python

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 12
    Points : 7
    Points
    7
    Par défaut Changer la largeur des traits dans une figure a posteriori
    Bonjour,
    Je fais des figures avec matplotlib.pylab, je trace de simple courbes.
    Ces courbes doivent me servir pour des présentations où il me faut des traits larges (axes et courbes).
    Je voudrais faire une fonction qui une fois tout tracé aille récupérer les objets Line2D et les élargisse.
    J'ai trouvé comment faire pour changer la tailles des ticks pour les axes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    import matplotlib.pylab as plt
    x,y=[1,2,3],[1,2,3]
    fig = plt.figure(1)
    plt.plot(x,y)
    powerpoint_style(fig)
     
    def powerpoint_style(fig) :
        Axe_size = 25
        ax = fig.gca()
        ax.set_xticklabels(ax.get_xticks(),fontsize = Axe_size)
        ax.set_yticklabels(ax.get_yticks(),fontsize = Axe_size)
        fig.show()
    Pour les lignes, je ne parviens pas à trouver la commande qui marche. Il y a surement à voir avec fig.findobj(fig, match='xxx'), mais je ne parviens pas à entrer ce qu'il faut à la place de xxx pour que ça marche...

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Pourquoi une fois tout tracé ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Bonne question... J'ai fait ce type de fonction sous Matlab et je procédais ainsi. S'il y a moyen de faire cela à priori, pourquoi pas. Ce que je souhaite éviter, est de retaper à chaque fois que je trace une courbe le "linewidth = XX", et ainsi de suite pour les axes, légendes, et labels.

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Il doit être possible de changer la taille classique dans matplotlib.rc, mais je ne sais pas sur le coup le nom de la propriété...

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 12
    Points : 7
    Points
    7
    Par défaut trouvé
    Après quelques recherches, j'arrive à cette fonction qui me convient très bien :
    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
     
    def powerpoint_style(Axe_tick_size=20,Line_size=2) :
        """ Elargit les traits, agrandit les labels.""" 
        fig = plt.gcf()
        ax  = fig.gca()
        # trouve tous les trucs avec linewidth et les modifie
        def myfunc(x):
            return hasattr(x, 'set_linewidth')
        for o in fig.findobj(myfunc):
            o.set_linewidth(Line_size)
        # en particuliers les marqueurs des ticks
        for line in ax.get_xticklines() + ax.get_yticklines():
            line.set_markersize(Line_size+2)
            line.set_markeredgewidth(Line_size)
     
        # trouve tous les textes et les modifie
        def myfunc(x):
            return hasattr(x, 'set_fontsize')
        for o in fig.findobj(myfunc):
            o.set_fontsize(Axe_tick_size)
        # les labels un peu plus larges
        ax.set_xlabel(ax.get_xlabel(),fontsize = Axe_tick_size+5)
        ax.set_ylabel(ax.get_ylabel(),fontsize = Axe_tick_size+5)
        fig.show()
    Reste que souvent les axes / labels sortent la fenêtre, je ne sais pas encore comment adapter cela automatiquement. Je fais donc en manuel au cas par cas avec la commande suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ax.set_position([0.2,0.2,0.75,0.75])

Discussions similaires

  1. changer le nom des variables dans une boucle
    Par bakaratoun dans le forum MATLAB
    Réponses: 3
    Dernier message: 05/02/2010, 13h50
  2. Changer "l'ordre" des composants dans une fiche
    Par sic_88 dans le forum Débuter
    Réponses: 2
    Dernier message: 23/06/2009, 13h18
  3. [AC-2007] Changer le nom des attributs dans une liste déroulante
    Par Razorback dans le forum IHM
    Réponses: 8
    Dernier message: 17/04/2009, 12h04
  4. Changer la couleur des lignes dans une JXTable
    Par guimo26 dans le forum Composants
    Réponses: 1
    Dernier message: 17/03/2009, 18h40
  5. [OpenOffice][Texte] openoffice writer changer l'orientation des caractère dans une table
    Par cpf2006 dans le forum OpenOffice & LibreOffice
    Réponses: 0
    Dernier message: 25/06/2008, 15h44

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