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 :

Matplotlib - ajoute un text sur un intervalle


Sujet :

Calcul scientifique Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    octobre 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : octobre 2020
    Messages : 13
    Points : 11
    Points
    11
    Par défaut Matplotlib - ajoute un text sur un intervalle
    Bonjour,

    Je suis en train de créer un graphe qui décrit la règle 68-95-99 pour une distribution normale, et il faut j'ajoute du texte pour décrire les segments, un peu comme ceci :



    Voici mon code pour l'instant :

    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
    def plot_line(ax, pt, mean, std):
        ax.plot([pt, pt], [0.0, scipy.stats.norm.pdf(pt, mean, std)], color='black', ls='--')
     
    def plot_std(ax, pt1, pt2, c, mean, std):
        plot_line(ax, pt1, mean, std)
        plot_line(ax, pt2, mean, std)
        ptx = np.linspace(pt1, pt2, 10)
        pty = scipy.stats.norm.pdf(ptx,mean,std)
        ax.fill_between(ptx, pty, color=c, alpha='1.0')
     
    x_min, x_max = -4., 4.
    y_min, y_max = 0., .5
    mean, std = 0., 1.
     
    x = np.linspace(x_min, x_max, 100)
    y = scipy.stats.norm.pdf(x, mean, std)
    color = ['blue', 'red', 'green']
     
    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1)
    ax.plot(x, y, color='black')
    for k in range(3):
        plot_std(ax, mean + k * std, mean + (k + 1)*std, color[k], mean, std)
        plot_std(ax, mean - k * std, mean - (k + 1)*std, color[k], mean, std)
    ax.grid(True)
    ax.set_xlim(x_min, x_max)
    ax.set_ylim(y_min, y_max)
    ax.set_title('68-95-99.7 rule')
    ax.set_xlabel('x')
    ax.set_ylabel('Normal Distribution')

  2. #2
    Membre chevronné

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    mars 2013
    Messages
    1 111
    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 : 1 111
    Points : 2 082
    Points
    2 082
    Par défaut
    Pour votre besoin, examiner les possibilités offertes par la fonction annotate.
    Sur ces 2 liens, des exemples d'utilisations multiples :

    https://matplotlib.org/stable/galler...tion_demo.html
    https://jakevdp.github.io/PythonData...nnotation.html

    et google vous en donnera plein d'autres.

    Vous pouvez customiser les flèches, la position du texte par rapport à cette fleche, etc ... donc en combinant tout ca, vous devriiez arriver à vos besoins. Et bien sûr la fonction annotate est une fonctionnalité très complète, donc si vous ne comprenez pas qqch dans les exemples et en faisant vos tests, et bien rien ne vaut une bonne lecture de la documentation de cette fonction

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    octobre 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : octobre 2020
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    J'ai déjà trouvé annotate mais ce n'est pas ce que je cherche. annotate affiche des flèches pour décrire un point mais je cherche à décrire un intervalle

  4. #4
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    novembre 2010
    Messages
    2 980
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : novembre 2010
    Messages : 2 980
    Points : 8 245
    Points
    8 245
    Par défaut
    salut,

    ça semble pourtant fonctionner pas trop mal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def anotate(x1, x2, y, text):
        ax.annotate(s='', xy=(x1, y), xytext=(x2, y), arrowprops=dict(arrowstyle='<->'))
        ax.text((x1+x2)/2, y, text, horizontalalignment='center', verticalalignment='bottom', size=16)
     
    anotate(-1, 1, 0.41, '68% within 1 SD')
    anotate(-2, 2, 0.44, '95% within 2 SD')
    anotate(-3, 3, 0.47, '99.7% within 3 SD')
    et le résultat :
    Images attachées Images attachées  

Discussions similaires

  1. Ajout de texte sur BITMAP
    Par sly078 dans le forum MFC
    Réponses: 1
    Dernier message: 25/05/2009, 10h38
  2. [GD] Ajout de texte sur image
    Par regis94 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 12/10/2008, 08h10
  3. [PHOTOSHOP] Ajout du texte sur une image
    Par khokho dans le forum Imagerie
    Réponses: 3
    Dernier message: 28/03/2007, 14h05
  4. [GD] ajouter un texte sur une image uniquement à l'impression signature numérique
    Par DrHelmut dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 05/10/2006, 16h13
  5. Ajouter du texte sur une vidéo
    Par ChIcKeN78 dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 01/06/2005, 10h43

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