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 :

figure size units [matplotlib]


Sujet :

Python

  1. #1
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut figure size units [matplotlib]
    Salut,

    Pour faire un Aperçu avant impression + matplotlib j'avais besoin de connaitre l'échelle (nombre de pixels par millimètres) mais j'ai testé ce code https://matplotlib.org/stable/galler...ize_units.html et cela ne correspond pas, je veux parler de la figure censée faire 15 cm x 5 cm...

    Est-ce que cela fonctionne chez vous ?

    Merci à ceux qui testeront...

    ----------
    Sinon y a-t-il un moyen sûr de connaitre le nombre de pixels par millimètres ?
    Au final c'est pour pouvoir placer (toutes proportions gardées) la figure sur une feuille A4 par exemple...

    EDIT : Est-il possible via python de connaitre la taille de l'écran ?

  2. #2
    Membre habitué
    Homme Profil pro
    Animateur Numérique
    Inscrit en
    Février 2013
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Animateur Numérique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2013
    Messages : 131
    Points : 186
    Points
    186
    Par défaut
    Salut,

    Pour moi, c'est tout à fait normal, 15x5 cm, c'est la taille totale de l'image :

    Nom : Def.png
Affichages : 68
Taille : 28,4 Ko

    Maintenant, tu peux supprimer les marges :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import matplotlib.pyplot as plt
    text_kwargs = dict(ha='center', va='center', fontsize=28, color='C1')
     
    cm = 1/2.54  # centimeters in inches
     
    plt.subplots(figsize=(15*cm, 5*cm))
    plt.text(0.5, 0.5, '15cm x 5cm', **text_kwargs)
    plt.tight_layout(pad=0, h_pad=None, w_pad=None, rect=None) 
    plt.show()

  3. #3
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Merci pour ta réponse...

    Oui j'ai finalement obtenu les mêmes valeurs que toi avec ce 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
    from PIL import Image
     
    def get_image_dimensions(image_path):
        image = Image.open(image_path)
        width, height = image.size
     
        # Obtention de la résolution en DPI (dots per inch)
        dpi = image.info.get(
            "dpi", (72, 72)
        )  # Valeur par défaut de 72 DPI si aucune résolution n'est spécifiée
     
        print("\ndpi", dpi, "image.size", image.size)
        # Conversion en dimensions en millimètres
        width_mm = width * 25.4 / dpi[0]
        height_mm = height * 25.4 / dpi[1]
     
        return width_mm, height_mm, image.size
    Mais sur mon écran je ne retrouve pas ces dimensions même quand j'affiche l'image en 100%...

    Bon la résolution de l'écran est différente il faut je pense adapter l’échelle, il faudra un zoom différent de 100% (100% ce n'est pas la taille réelle apparemment...)


    -----------
    Sinon c'est quel logiciel que l'on voit sur ton screenshot ?

  4. #4
    Membre habitué
    Homme Profil pro
    Animateur Numérique
    Inscrit en
    Février 2013
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Animateur Numérique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2013
    Messages : 131
    Points : 186
    Points
    186
    Par défaut
    Tu aurais pu obtenir ces infos avec matplotlib, plutôt que d'utiliser PIL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import matplotlib.pyplot as plt
     
    text_kwargs = dict(ha='center', va='center', fontsize=28, color='C1')
     
    cm = 1/2.54  # centimeters in inches
    fig = plt.figure(figsize = (15*cm, 5*cm))
     
    print(fig.get_size_inches()/cm)
     
    plt.text(0.5, 0.5, '15cm x 5cm', **text_kwargs)
    plt.tight_layout(pad=0, h_pad=None, w_pad=None, rect=None) 
    plt.show()
    le logiciel, c'est GIMP, mais un simple viewer peut surement te donner ces infos/

  5. #5
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Merci.

  6. #6
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Citation Envoyé par Beginner. Voir le message
    Mais sur mon écran je ne retrouve pas ces dimensions même quand j'affiche l'image en 100%...

    Bon la résolution de l'écran est différente il faut je pense adapter l’échelle, il faudra un zoom différent de 100% (100% ce n'est pas la taille réelle apparemment...)
    Bon ben c'est bon en fixant le dpi à 93.6 j'ai bien les bonnes dimensions de la figure à l’écran...

  7. #7
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Citation Envoyé par Beginner. Voir le message
    EDIT : Est-il possible via python de connaitre la taille de l'écran ?
    Avec tkinter cela ne fonctionne pas très bien chez moi :

    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
    import tkinter as tk
     
    root = tk.Tk()
     
    height = root.winfo_screenheight()
    width = root.winfo_screenwidth()
     
    print("width x height = %d x %d (in pixels)\n" %(width, height))
     
    height = root.winfo_screenmmheight() 
    width = root.winfo_screenmmwidth()
     
    print("width x height = %d x %d (in mm)" %(width, height))
     
    mainloop()
    Mais ça marche plutôt bien avec screeninfo :

    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
    from screeninfo import get_monitors 
     
    def get_screen_size_cm():
        monitors = get_monitors()
        monitor = monitors[0]  
     
        width_mm = monitor.width_mm
        height_mm = monitor.height_mm
     
        width_cm = width_mm / 10
        height_cm = height_mm / 10
     
        return width_cm, height_cm
     
    screen_size_cm = get_screen_size_cm()
    print(f"Taille de l'écran : {screen_size_cm[0]} cm x {screen_size_cm[1]} cm")

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 126
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 126
    Points : 1 636
    Points
    1 636
    Par défaut
    J'allais évoquer le fait que tu as peut-être aussi un zoom d'appliquer sur l'écran sous windows, clic droit sur le bureau > paramètres d'affichage et section "Mise à l'échelle et disposition")

  9. #9
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Merci.

    Oui effectivement mais j'ai regardé et j'ai l’option "100% (recommandé)" qui est sélectionnée... Et je ne peux pas choisir plus bas... Mais à 100% l'image apparait légèrement plus grande...

    Du coup j'ai dû fixer le dpi à 93.6 pour avoir les bonnes dimensions de la figure à l’écran...

    Et chez vous ça fonctionne directement sans changer le dpi de la figure ?

Discussions similaires

  1. [Python 3.X] Matplotlib : figure size , taille reelle ( patron )
    Par TWSOTM dans le forum Général Python
    Réponses: 5
    Dernier message: 27/07/2022, 18h27
  2. Taille figure crée avec matplotlib
    Par pzorba75 dans le forum Général Python
    Réponses: 2
    Dernier message: 24/09/2020, 16h40
  3. [Python 2.X] Enregistrer des figures séparemment avec matplotlib
    Par nastassia91 dans le forum Général Python
    Réponses: 2
    Dernier message: 13/03/2018, 14h49
  4. [QtGui] Mise à jour automatique d'une figure/Image - Seaborn - Matplotlib
    Par Kevin_Mylano dans le forum PyQt
    Réponses: 1
    Dernier message: 26/10/2016, 11h57
  5. [matplotlib][Tkinter] Conflit figure/Tk ?
    Par Panthère Bleue dans le forum Calcul scientifique
    Réponses: 2
    Dernier message: 12/07/2006, 08h48

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