{"id":3501,"date":"2026-10-14T18:01:02","date_gmt":"2026-10-14T18:01:02","guid":{"rendered":"http:\/\/french.arabpsychology.com\/statistics\/comment-enregistrer-figure-matplotlib-fichier-exemples\/"},"modified":"2026-10-14T18:01:02","modified_gmt":"2026-10-14T18:01:02","slug":"comment-enregistrer-figure-matplotlib-fichier-exemples","status":"publish","type":"psych_stat","link":"https:\/\/french.arabpsychology.com\/?psych_stat=comment-enregistrer-figure-matplotlib-fichier-exemples","title":{"rendered":"Comment enregistrer une figure Matplotlib dans un fichier (avec des exemples)"},"content":{"rendered":"<p>Dans le domaine du calcul scientifique, de l&rsquo;ing\u00e9nierie des donn\u00e9es et de l&rsquo;analyse exploratoire, la transformation d&rsquo;abstractions num\u00e9riques complexes en repr\u00e9sentations graphiques intelligibles constitue une \u00e9tape fondamentale. La biblioth\u00e8que <a rel=\"noopener noreferrer\" href=\"https:\/\/matplotlib.org\/\">Matplotlib<\/a>, pierre angulaire de l&rsquo;\u00e9cosyst\u00e8me scientifique en langage Python depuis son introduction par John D. Hunter au d\u00e9but des ann\u00e9es 2000, incarne l&rsquo;outil standard pour la construction de visualisations cart\u00e9siennes, statistiques et volum\u00e9triques. Cependant, la simple production d&rsquo;une figure sur un \u00e9cran interactif ne constitue qu&rsquo;une phase pr\u00e9liminaire et transitoire du travail analytique. La p\u00e9rennisation de ces graphiques dans des formats de fichiers normalis\u00e9s est imp\u00e9rative pour satisfaire aux crit\u00e8res de diffusion acad\u00e9mique, d&rsquo;archivage documentaire et d&rsquo;int\u00e9gration logicielle.<\/p>\n<p>L&rsquo;enregistrement rigoureux d&rsquo;une visualisation graphique implique bien plus que la conversion superficielle d&rsquo;un canevas de pixels en un fichier statique. Il n\u00e9cessite une compr\u00e9hension intime des moteurs de rendu sous-jacents, des distinctions fondamentales entre g\u00e9om\u00e9tries vectorielles et trames matricielles, ainsi que des interactions d\u00e9licates entre la densit\u00e9 de points par pouce, les bo\u00eetes englobantes et la gestion des canaux de transparence. Les incoh\u00e9rences typographiques, la pixellisation ind\u00e9sirable lors de l&rsquo;impression sur presse universitaire, la troncature marginale d&rsquo;\u00e9tiquettes de donn\u00e9es ou l&rsquo;apparition d&rsquo;images enti\u00e8rement blanches constituent autant d&rsquo;\u00e9cueils r\u00e9currents r\u00e9sultant d&rsquo;une utilisation approximative des fonctions d&rsquo;exportation.<\/p>\n<p>Le pr\u00e9sent guide a pour vocation d&rsquo;exposer de mani\u00e8re exhaustive, syst\u00e9matique et didactique les principes, m\u00e9canismes et subtilit\u00e9s techniques gouvernant l&rsquo;exportation de figures g\u00e9n\u00e9r\u00e9es avec Matplotlib. \u00c0 travers une analyse architecturale approfondie, l&rsquo;examen d\u00e9taill\u00e9 des param\u00e8tres de la m\u00e9thode d&rsquo;enregistrement, l&rsquo;exploration de flux de travail automatis\u00e9s et l&rsquo;\u00e9tude de cas concrets, ce document fournit aux chercheurs, ing\u00e9nieurs et analystes les connaissances n\u00e9cessaires pour ma\u00eetriser l&rsquo;int\u00e9grit\u00e9 visuelle de leurs cr\u00e9ations, garantissant une reproductibilit\u00e9 sans faille dans le respect des standards typographiques contemporains.<\/p>\n<h2>1. Introduction aux m\u00e9canismes d&rsquo;exportation graphique avec Matplotlib<\/h2>\n<h3>1.1 Importance de la persistance des repr\u00e9sentations visuelles de donn\u00e9es<\/h3>\n<p>La p\u00e9rennisation des visualisations de donn\u00e9es s&rsquo;inscrit au c\u0153ur m\u00eame de la m\u00e9thode scientifique contemporaine. Alors que l&rsquo;environnement interactif permet au praticien d&rsquo;ajuster des hyperparam\u00e8tres, d&rsquo;explorer des distributions empiriques ou d&rsquo;inspecter visuellement des anomalies r\u00e9siduelles, cette forme volatile de repr\u00e9sentation graphique dispara\u00eet d\u00e8s l&rsquo;interruption du processus d&rsquo;ex\u00e9cution ou la fermeture de la boucle d&rsquo;\u00e9v\u00e9nements de l&rsquo;interface utilisateur. La s\u00e9rialisation d&rsquo;une figure sur un support de stockage persistant constitue l&rsquo;op\u00e9ration par laquelle une observation visuelle devient un art\u00e9fact documentaire consultable, v\u00e9rifiable et transmissible de mani\u00e8re asynchrone.<\/p>\n<p>Dans le contexte de la recherche acad\u00e9mique et du d\u00e9veloppement technologique rigoureux, les exigences de tra\u00e7abilit\u00e9 et de reproductibilit\u00e9 computationnelle imposent que chaque graphique publi\u00e9 puisse \u00eatre rattach\u00e9 de fa\u00e7on d\u00e9terministe au code source et aux donn\u00e9es brutes qui l&rsquo;ont engendr\u00e9. L&rsquo;enregistrement sur disque ne doit donc pas alt\u00e9rer l&rsquo;information quantitative v\u00e9hicul\u00e9e : les \u00e9chelles, les barres d&rsquo;incertitude, le contraste des teintes et l&rsquo;alignement des rep\u00e8res doivent \u00eatre pr\u00e9serv\u00e9s avec une pr\u00e9cision math\u00e9matique absolue. Une d\u00e9gradation caus\u00e9e par une compression destructive inopportune ou un \u00e9chantillonnage spatial inad\u00e9quat compromet l&rsquo;int\u00e9grit\u00e9 de la communication scientifique et peut alt\u00e9rer l&rsquo;interpr\u00e9tation de r\u00e9sultats exp\u00e9rimentaux.<\/p>\n<p>Par ailleurs, l&rsquo;insertion de graphismes dans des vecteurs de diffusion professionnels \u2014 tels que les th\u00e8ses de doctorat, les articles soumis \u00e0 \u00e9valuation par les pairs au sein de revues internationales ou les rapports d\u00e9cisionnels en entreprise \u2014 exige le respect de cahiers des charges formels stricts. Les comit\u00e9s \u00e9ditoriaux imposent fr\u00e9quemment des contraintes physiques draconiennes quant aux dimensions de composition, aux modes de compression et \u00e0 la r\u00e9solution minimale. L&rsquo;exportation ma\u00eetris\u00e9e de figures ne constitue pas une simple commodit\u00e9 technique, mais une comp\u00e9tence pivot conditionnant la diffusion du savoir scientifique.<\/p>\n<h3>1.2 Architecture sous-jacente du module pyplot et gestion des canvas<\/h3>\n<p>Pour appr\u00e9hender la m\u00e9canique d&rsquo;enregistrement d&rsquo;une figure, il est indispensable de diss\u00e9quer l&rsquo;architecture interne de Matplotlib, laquelle repose sur une hi\u00e9rarchie tripartite : l&rsquo;interface utilisateur ou module fonctionnel, le canevas de dessin (<em>FigureCanvas<\/em>) et le moteur de rendu graphique (<em>Renderer<\/em>). Le module <code>matplotlib.pyplot<\/code> op\u00e8re historiquement selon le paradigme d&rsquo;une machine \u00e0 \u00e9tats finis calqu\u00e9e sur le fonctionnement de MATLAB. Cette couche d&rsquo;abstraction suit en permanence un pointeur interne d\u00e9signant la \u00ab figure courante \u00bb (<em>current figure<\/em>) et les \u00ab axes courants \u00bb (<em>current axes<\/em>), relayant de mani\u00e8re transparente les commandes de haut niveau vers les objets instanci\u00e9s en arri\u00e8re-plan.<\/p>\n<p>L&rsquo;objet central de cette hi\u00e9rarchie est la classe <code>Figure<\/code>, qui repr\u00e9sente le conteneur physique ultime de tous les \u00e9l\u00e9ments graphiques : axes cart\u00e9siens, titres, l\u00e9gendes, segments de droites et collections de marqueurs. Cet objet <code>Figure<\/code> est intimement li\u00e9 \u00e0 une instance concr\u00e8te de <code>FigureCanvasBase<\/code>, qui mat\u00e9rialise la surface abstraite de dessin, et \u00e0 une instance de <code>RendererBase<\/code>, qui traduit les ordres g\u00e9om\u00e9triques abstraits en instructions primitives compr\u00e9hensibles par le mat\u00e9riel ou le format de fichier vis\u00e9. Cette s\u00e9paration stricte entre la d\u00e9finition g\u00e9om\u00e9trique et le rendu effectif conf\u00e8re \u00e0 la biblioth\u00e8que sa flexibilit\u00e9.<\/p>\n<p>Le choix du moteur d&rsquo;affichage (<em>backend<\/em>) conditionne la nature des interactions possibles. Matplotlib distingue les backends interactifs (tels que Qt, Tkinter, ou WX), destin\u00e9s \u00e0 l&rsquo;affichage dynamique sur un moniteur avec gestion des \u00e9v\u00e9nements clavier et souris, des backends non interactifs dits \u00ab hors-\u00e9cran \u00bb ou <em>headless<\/em> (tels que Agg pour les trames matricielles, ou PDF, PS, SVG pour le dessin vectoriel). Lorsqu&rsquo;une proc\u00e9dure d&rsquo;\u00e9criture sur disque est initi\u00e9e, le canevas sollicite le moteur appropri\u00e9 pour s\u00e9rialiser l&rsquo;arbre des artistes graphiques en un flux d&rsquo;octets sans n\u00e9cessairement mobiliser une interface graphique fen\u00eatr\u00e9e.<\/p>\n<h3>1.3 Vue d&rsquo;ensemble de la m\u00e9thode savefig<\/h3>\n<p>La fonction <code>matplotlib.pyplot.savefig<\/code>, tout comme sa m\u00e9thode homologue <code>Figure.savefig<\/code>, repr\u00e9sente le point d&rsquo;entr\u00e9e universel pour ordonner la conversion et la persistance d&rsquo;une composition graphique sur le syst\u00e8me de fichiers local ou dans un flux binaire en m\u00e9moire vive. Sa mission consiste \u00e0 encapsuler les interactions complexes entre le gestionnaire de layout, le moteur de rendu vectoriel ou matriciel, et les codecs d&rsquo;encodage de fichiers. D\u00e8s son invocation, elle d\u00e9clenche la passe finale de positionnement g\u00e9om\u00e9trique, \u00e9value les contraintes de dimensionnement et orchestre la rasterisation ou la vectorisation de chaque n\u0153ud composant la sc\u00e8ne graphique.<\/p>\n<p>Il est fondamental de diff\u00e9rencier le r\u00f4le de <code>savefig<\/code> de celui de l&rsquo;affichage interactif g\u00e9n\u00e9ralement obtenu via <code>plt.show()<\/code>. L&rsquo;affichage interactif est optimis\u00e9 pour une restitution rapide sur \u00e9cran num\u00e9rique, appliquant souvent des r\u00e9solutions modestes conformes \u00e0 la grille de pixels du moniteur h\u00f4te (typiquement de 72 \u00e0 100 points par pouce) et adoptant les param\u00e8tres de gestion de fen\u00eatrage du syst\u00e8me d&rsquo;exploitation. \u00c0 l&rsquo;inverse, l&rsquo;enregistrement de fichier via <code>savefig<\/code> permet de d\u00e9corr\u00e9ler compl\u00e8tement les caract\u00e9ristiques de l&rsquo;image de celles de l&rsquo;\u00e9cran : une figure peut ainsi \u00eatre compil\u00e9e \u00e0 600 DPI avec un arri\u00e8re-plan translucide et des polices vectorielles incorpor\u00e9es, alors m\u00eame qu&rsquo;elle n&rsquo;a jamais \u00e9t\u00e9 mat\u00e9rialis\u00e9e dans une fen\u00eatre graphique.<\/p>\n<p>La flexibilit\u00e9 native de cette m\u00e9thode repose en grande partie sur son aptitude \u00e0 analyser dynamiquement la requ\u00eate de l&rsquo;utilisateur, notamment \u00e0 travers l&rsquo;extension attribu\u00e9e au nom de fichier cible. Qu&rsquo;il s&rsquo;agisse d&rsquo;exporter un sch\u00e9ma lin\u00e9aire en format SVG destin\u00e9 au web moderne, une trame PNG destin\u00e9e \u00e0 un document num\u00e9rique ou un fichier EPS requis par une imprimerie traditionnelle, <code>savefig<\/code> s\u00e9lectionne automatiquement le backend appropri\u00e9 au sein du registre interne de Matplotlib, unifiant sous une signature fonctionnelle unique un spectre extraordinairement vaste d&rsquo;op\u00e9rations de bas niveau.<\/p>\n<h2>2. Fondements et syntaxe fondamentale de plt.savefig<\/h2>\n<h3>2.1 Signature formelle et param\u00e8tres primaires<\/h3>\n<p>L&rsquo;invocation canonique de la fonction s&rsquo;effectue au travers d&rsquo;une signature riche dont la forme simplifi\u00e9e s&rsquo;articule comme suit : <code>matplotlib.pyplot.savefig(fname, *, dpi=None, format=None, metadata=None, bbox_inches=None, pad_inches=0.1, facecolor='auto', edgecolor='auto', backend=None, **kwargs)<\/code>. Le premier param\u00e8tre positionnel, <code>fname<\/code>, correspond \u00e0 la cible de l&rsquo;\u00e9criture ; il peut s&rsquo;agir d&rsquo;une cha\u00eene de caract\u00e8res d\u00e9signant un chemin d&rsquo;acc\u00e8s dans l&rsquo;arborescence du disque, d&rsquo;une instance de la classe <code>pathlib.Path<\/code> issue de la biblioth\u00e8que standard, ou encore d&rsquo;un objet de type fichier ouvert en mode binaire (comme un tampon m\u00e9moire <code>io.BytesIO<\/code>).<\/p>\n<p>L&rsquo;argument <code>format<\/code> permet de forcer explicitement le format d&rsquo;encodage du fichier de sortie (par exemple <code>'png'<\/code>, <code>'pdf'<\/code>, <code>'svg'<\/code>, <code>'jpeg'<\/code>). Si ce param\u00e8tre est omis, la m\u00e9thode inspecte scrupuleusement la terminaison de la cha\u00eene pass\u00e9e \u00e0 <code>fname<\/code> pour en d\u00e9duire l&rsquo;extension et activer le pilote correspondant. Cette inf\u00e9rence contextuelle garantit une grande fluidit\u00e9 d&rsquo;\u00e9criture dans les scripts quotidiens tout en laissant la latitude, lors de l&rsquo;int\u00e9gration dans des pipelines d&rsquo;infrastructure logicielle, d&rsquo;\u00e9crire des donn\u00e9es format\u00e9es directement dans des descripteurs de fichiers anonymes sans extension apparente.<\/p>\n<p>Les param\u00e8tres secondaires gouvernent l&rsquo;esth\u00e9tique et la pr\u00e9cision math\u00e9matique du trac\u00e9 lors de son\u9f87mat\u00e9rialisation. La variable <code>dpi<\/code> pilote la granularit\u00e9 de la subdivision spatiale pour les sorties rasteris\u00e9es, tandis que <code>facecolor<\/code> et <code>edgecolor<\/code> permettent de surcharger de fa\u00e7on ponctuelle les attributs chromatiques de l&rsquo;enveloppe ext\u00e9rieure de la figure sans alt\u00e9rer les styles globaux pr\u00e9alablement d\u00e9finis dans le dictionnaire <code>rcParams<\/code>. L&rsquo;ensemble de ces options offre un contr\u00f4le chirurgical sur chaque aspect physique du document g\u00e9n\u00e9r\u00e9.<\/p>\n<h3>2.2 Cycle de vie de la figure : positionnement de savefig par rapport \u00e0 show<\/h3>\n<p>L&rsquo;une des anomalies les plus couramment d\u00e9plor\u00e9es par les d\u00e9butants en programmation scientifique avec Python r\u00e9side dans l&rsquo;obtention d&rsquo;une image vierge, caract\u00e9ris\u00e9e par un rectangle blanc d\u00e9nu\u00e9 de tout trac\u00e9. Cette d\u00e9convenue r\u00e9sulte presque invariablement d&rsquo;un ordonnancement chronologique erron\u00e9 entre l&rsquo;appel \u00e0 <code>plt.savefig()<\/code> et l&rsquo;appel \u00e0 <code>plt.show()<\/code>. Pour appr\u00e9hender l&rsquo;origine de ce comportement, il convient d&rsquo;examiner le cycle de vie interne d&rsquo;une session de dessin g\u00e9r\u00e9e par la machine \u00e0 \u00e9tats de <code>pyplot<\/code>.<\/p>\n<p>Lorsque des commandes telles que <code>plt.plot()<\/code>, <code>plt.scatter()<\/code> ou <code>plt.title()<\/code> sont invoqu\u00e9es, la machine \u00e0 \u00e9tats peuple progressivement l&rsquo;arborescence des objets graphiques de la figure active courante. Si le d\u00e9veloppeur appelle <code>plt.show()<\/code>, le backend graphique interactif prend le relais, ouvre la fen\u00eatre de rendu, y projette le dessin, et entre dans une boucle d&rsquo;attente d&rsquo;\u00e9v\u00e9nements. \u00c0 la fermeture de cette fen\u00eatre \u2014 que celle-ci proc\u00e8de d&rsquo;une action volontaire de l&rsquo;utilisateur ou d&rsquo;un arr\u00eat programm\u00e9 \u2014, le syst\u00e8me d&rsquo;orchestration de Matplotlib consid\u00e8re la t\u00e2che de visualisation comme parachev\u00e9e. Par d\u00e9faut, la directive de configuration interne <code>plt.rcParams['figure.raise_window']<\/code> et les gestionnaires de ressources proc\u00e8dent \u00e0 la r\u00e9initialisation de la toile graphique active, purgeant les axes de leur contenu afin de lib\u00e9rer l&rsquo;espace m\u00e9moire allou\u00e9.<\/p>\n<p>En cons\u00e9quence, si la fonction <code>plt.savefig()<\/code> est positionn\u00e9e subs\u00e9quemment \u00e0 <code>plt.show()<\/code>, elle agit sur un objet canevas pr\u00e9alablement vid\u00e9 ou sur une nouvelle figure implicitement instanci\u00e9e et enti\u00e8rement vierge. La r\u00e8gle de construction proc\u00e9durale est donc inviolable : toute op\u00e9ration d&rsquo;exportation sur support physique doit imp\u00e9rativement pr\u00e9c\u00e9der l&rsquo;appel \u00e0 <code>plt.show()<\/code>, ou s&rsquo;inscrire dans une logique orient\u00e9e objet qui contourne totalement l&rsquo;ambigu\u00eft\u00e9 de la figure active courante.<\/p>\n<figure class=\"wpt-preserved-image\"><img fetchpriority=\"high\" decoding=\"async\" src=\"http:\/\/french.arabpsychology.com\/wp-content\/uploads\/2026\/09\/matplot_save1-1.png\" alt=\"\" \/><\/figure>\n<h3>2.3 D\u00e9finition des chemins d&rsquo;acc\u00e8s relatifs et absolus<\/h3>\n<p>L&rsquo;\u00e9criture d&rsquo;un fichier sur le sous-syst\u00e8me de stockage exige une gestion rigoureuse des chemins d&rsquo;acc\u00e8s au syst\u00e8me de fichiers, sous peine de d\u00e9clencher l&rsquo;exception standard <code>FileNotFoundError<\/code>. Lorsqu&rsquo;un simple nom de fichier ou un chemin relatif tel que <code>\"resultats\/figure1.png\"<\/code> est fourni en argument \u00e0 <code>savefig<\/code>, Matplotlib r\u00e9sout ce pointeur par rapport au r\u00e9pertoire de travail courant (<em>current working directory<\/em>) du processus Python en cours d&rsquo;ex\u00e9cution, lequel ne correspond pas n\u00e9cessairement \u00e0 l&#8217;emplacement physique du script source ou du notebook Jupyter.<\/p>\n<p>Pour garantir la portabilit\u00e9 et l&rsquo;ind\u00e9pendance de la plateforme (notamment entre les architectures POSIX comme Linux et macOS, et les syst\u00e8mes Microsoft Windows qui emploient des s\u00e9parateurs de chemin distincts), il est formellement recommand\u00e9 d&rsquo;exploiter la biblioth\u00e8que standard <a rel=\"noopener noreferrer\" href=\"https:\/\/docs.python.org\/3\/library\/pathlib.html\">pathlib<\/a>. L&rsquo;utilisation conjointe d&rsquo;objets <code>Path<\/code> permet d&rsquo;ancrer de mani\u00e8re absolue le r\u00e9pertoire d&rsquo;exportation par rapport \u00e0 l&#8217;emplacement du code source, par le biais de l&rsquo;attribut sp\u00e9cial <code>__file__<\/code> dans les modules d&rsquo;application r\u00e9guliers :<\/p>\n<p>En adoptant une approche rigoureuse, l&rsquo;arborescence cible doit \u00eatre cr\u00e9\u00e9e de mani\u00e8re pr\u00e9ventive. Matplotlib n&rsquo;assume pas la responsabilit\u00e9 de cr\u00e9er de fa\u00e7on r\u00e9cursive les r\u00e9pertoires parents manquants mentionn\u00e9s dans le chemin fourni. Par cons\u00e9quent, l&rsquo;invocation pr\u00e9alable de m\u00e9thodes telles que <code>Path.mkdir(parents=True, exist_ok=True)<\/code> s&rsquo;impose comme une bonne pratique incontournable d&rsquo;ing\u00e9nierie logicielle pour immuniser le pipeline de traitement contre les \u00e9checs d&rsquo;\u00e9criture inopin\u00e9s.<\/p>\n<h2>3. Formats de fichiers vectoriels et matriciels pris en charge<\/h2>\n<h3>3.1 Exportations matricielles : caract\u00e9ristiques des formats PNG et JPEG<\/h3>\n<p>L&rsquo;exportation matricielle \u2014 ou en trame de points (<em>raster<\/em>) \u2014 d\u00e9compose l&rsquo;espace graphique en une grille bidimensionnelle finie de pixels \u00e9l\u00e9mentaires, chacun poss\u00e9dant une valeur chromatique d\u00e9termin\u00e9e. Le format PNG (<em>Portable Network Graphics<\/em>) s&rsquo;impose comme l&rsquo;\u00e9talon d&rsquo;or pour la sauvegarde matricielle des visualisations issues de Matplotlib. Con\u00e7u sp\u00e9cifiquement pour rem\u00e9dier aux carences et aux restrictions de licences du GIF, le format PNG met en \u0153uvre l&rsquo;algorithme de compression sans perte DEFLATE. Cette particularit\u00e9 technique garantit que les lignes ultra-fines, le texte de petite taille et les transitions brutales de contraste caract\u00e9ristiques des trac\u00e9s scientifiques conservent une nettet\u00e9 absolue, exempte de tout flou num\u00e9rique.<\/p>\n<p>\u00c0 l&rsquo;oppos\u00e9, le format JPEG (<em>Joint Photographic Experts Group<\/em>) repose sur un algorithme de compression avec perte fond\u00e9 sur la transform\u00e9e en cosinus discr\u00e8te (DCT). Ce traitement math\u00e9matique est formul\u00e9 pour exploiter les limitations de la perception humaine en \u00e9liminant les variations spatiales de haute fr\u00e9quence dans les images photographiques naturelles. Appliqu\u00e9 \u00e0 des trac\u00e9s scientifiques, le JPEG produit d&rsquo;importants artefacts de compression, visibles sous la forme de halos parasites autour des courbes, de franges floues entourant les caract\u00e8res typographiques et d&rsquo;une alt\u00e9ration des teintes unies. Son usage doit donc \u00eatre syst\u00e9matiquement proscrit pour la documentation acad\u00e9mique, sauf en cas de contraintes extr\u00eames d&rsquo;espace disque impos\u00e9es par des applications mobiles sp\u00e9cifiques.<\/p>\n<p>Le param\u00e9trage du format PNG au sein de Matplotlib permet d&rsquo;ajuster des variables telles que le niveau de compression (via les param\u00e8tres de bas niveau du backend) et la gestion de la profondeur de couleur (canaux RVB ou RVBA). Pour la quasi-totalit\u00e9 des besoins informatiques, le PNG g\u00e9n\u00e9r\u00e9 \u00e0 la r\u00e9solution appropri\u00e9e fournit le compromis optimal entre int\u00e9grit\u00e9 structurelle des donn\u00e9es visuelles et universalit\u00e9 de lecture sur tous les terminaux num\u00e9riques.<\/p>\n<h3>3.2 Formats vectoriels pour publication : PDF, SVG et EPS<\/h3>\n<p>Contrairement aux formats de pixels, les formats de fichiers vectoriels ne stockent pas des valeurs discr\u00e8tes de points de couleur, mais des primitives g\u00e9om\u00e9triques math\u00e9matiques : \u00e9quations de courbes de B\u00e9zier, segments de droites, coordonn\u00e9es de polygones, polylignes et descriptions de glyphes typographiques. Cette conception fondamentale conf\u00e8re aux formats vectoriels une propri\u00e9t\u00e9 inestimable : l&rsquo;invariance d&rsquo;\u00e9chelle. Une figure enregistr\u00e9e en format vectoriel peut \u00eatre agrandie ind\u00e9finiment \u2014 qu&rsquo;il s&rsquo;agisse d&rsquo;un affichage sur \u00e9cran 8K, d&rsquo;un zoom analytique sur un pic spectral dans une visionneuse de documents, ou d&rsquo;une impression sur une banderole murale \u2014 sans jamais souffrir de pixellisation ni de cr\u00e9nelage.<\/p>\n<p>Le format PDF (<em>Portable Document Format<\/em>) constitue la r\u00e9f\u00e9rence h\u00e9g\u00e9monique pour l&rsquo;int\u00e9gration de graphiques au sein de la cha\u00eene d&rsquo;\u00e9dition scientifique, notamment en symbiose avec le syst\u00e8me de composition typographique <a rel=\"noopener noreferrer\" href=\"https:\/\/www.tug.org\/\">LaTeX<\/a>. L&rsquo;exportation de figures en PDF via Matplotlib pr\u00e9serve la structure hi\u00e9rarchique du dessin et permet d&rsquo;incorporer les polices de caract\u00e8res utilis\u00e9es sous forme de glyphes vectoriels \u00e9ditables, garantissant un rendu impeccable lors de l&rsquo;impression papier ou de la lecture num\u00e9rique.<\/p>\n<p>Le format SVG (<em>Scalable Vector Graphics<\/em>), reposant sur une syntaxe XML normalis\u00e9e par le World Wide Web Consortium (W3C), se r\u00e9v\u00e8le quant \u00e0 lui irrempla\u00e7able pour la diffusion web interactive et l&rsquo;int\u00e9gration dans des pages HTML responsives. Il permet en outre la r\u00e9\u00e9dition ult\u00e9rieure de la composition graphique dans des logiciels de dessin vectoriel professionnels tels qu&rsquo;Adobe Illustrator ou Inkscape. Enfin, le format EPS (<em>Encapsulated PostScript<\/em>), bien que technologiquement plus ancien et progressivement abandonn\u00e9 au profit du PDF, demeure parfois requis par certaines presses universitaires historiques soumises \u00e0 des cha\u00eenes de photocomposition rigides.<\/p>\n<h3>3.3 Crit\u00e8res m\u00e9thodologiques de s\u00e9lection du format de sortie<\/h3>\n<p>La s\u00e9lection raisonn\u00e9e d&rsquo;un format de sortie ne doit jamais \u00eatre le fruit du hasard ou de la simple habitude, mais d&rsquo;une analyse des compromis fonctionnels li\u00e9s \u00e0 la destination finale du graphique. Le premier crit\u00e8re d\u00e9cisionnel r\u00e9side dans la nature intrins\u00e8que des donn\u00e9es repr\u00e9sent\u00e9es. Un diagramme en b\u00e2tons, une courbe de tendance, un graphique de dispersion comptant quelques milliers de points ou un trac\u00e9 de contour vectoriel tirent un immense avantage des formats vectoriels (PDF, SVG), qui maintiennent un poids de fichier tr\u00e8s mod\u00e9r\u00e9 tout en offrant une d\u00e9finition g\u00e9om\u00e9trique parfaite.<\/p>\n<p>Cependant, le paradigme vectoriel r\u00e9v\u00e8le une faiblesse substantielle d\u00e8s lors que la densit\u00e9 d&rsquo;\u00e9l\u00e9ments graphiques cro\u00eet de mani\u00e8re exponentielle. Si un chercheur tente d&rsquo;exporter un graphique de dispersion contenant dix millions de points individuels en PDF ou en SVG, le moteur de Matplotlib va inscrire m\u00e9ticuleusement dix millions de descripteurs d&rsquo;objets g\u00e9om\u00e9triques dans le fichier r\u00e9sultant. Le document produit atteindra des centaines de m\u00e9gaoctets, saturera la m\u00e9moire de n&rsquo;importe quel lecteur de documents PDF et provoquera de violents ralentissements lors de l&rsquo;affichage. Dans une telle configuration, la rasterisation matricielle en PNG s&rsquo;impose comme une n\u00e9cessit\u00e9 absolue : l&rsquo;ensemble des points denses fusionne dans une matrice de pixels \u00e0 haute r\u00e9solution, stabilisant la taille du fichier et garantissant un rendu instantan\u00e9.<\/p>\n<p>Le tableau m\u00e9thodologique suivant r\u00e9capitule les arbitrages recommand\u00e9s en fonction du milieu d&rsquo;exploitation envisag\u00e9 pour le graphique :<\/p>\n<ul>\n<li><strong>Articles scientifiques pour revues internationales :<\/strong> Format PDF vectoriel en priorit\u00e9, avec incorporation des polices. Les comit\u00e9s \u00e9ditoriaux exigent fr\u00e9quemment ce format pour composer les \u00e9preuves finales. Pour les images radiologiques, microscopiques ou les spectres continus g\u00e9ants, utiliser le format TIFF ou PNG \u00e0 300 ou 600 DPI.<\/li>\n<li><strong>Rapports internes, pr\u00e9sentations et affichages sur \u00e9crans de travail :<\/strong> Format PNG \u00e0 150 ou 300 DPI, assurant un affichage instantan\u00e9 et sans heurts dans les logiciels bureautiques courants.<\/li>\n<li><strong>Portails web, tableaux de bord interactifs et documentation en ligne :<\/strong> Format SVG pour les graphiques simples ou l\u00e9gers permettant un redimensionnement dynamique sur les \u00e9crans mobiles ; format PNG optimis\u00e9 pour les trac\u00e9s complexes.<\/li>\n<li><strong>Reproduction graphique \u00e9ditoriale ou retouche esth\u00e9tique pouss\u00e9e :<\/strong> Format SVG afin de permettre la s\u00e9lection individuelle des trac\u00e9s, des axes et des \u00e9tiquettes dans des ateliers de retouche vectorielle.<\/li>\n<\/ul>\n<h2>4. Ma\u00eetrise de la r\u00e9solution et des dimensions spatiales (DPI et taille)<\/h2>\n<h3>4.1 R\u00f4le et configuration du param\u00e8tre DPI (Dots Per Inch)<\/h3>\n<p>L&rsquo;acronyme DPI (<em>Dots Per Inch<\/em>, ou points par pouce) d\u00e9signe la mesure de la r\u00e9solution spatiale appliqu\u00e9e lors de la conversion d&rsquo;une repr\u00e9sentation graphique abstraite en une matrice physique de pixels. Un pouce \u00e9quivalant exactement \u00e0 2,54 centim\u00e8tres, le DPI d\u00e9finit le nombre de pixels individuels allou\u00e9s sur une longueur physique de un pouce. Il importe de souligner que cette notion n&rsquo;a de pertinence math\u00e9matique directe que pour les formats d&rsquo;exportation matriciels (PNG, JPEG, TIFF, BMP) ainsi que pour la rast\u00e9risation des \u00e9l\u00e9ments textuels ou des motifs sp\u00e9cifiques au sein de formats hybrides.<\/p>\n<p>Par d\u00e9faut, l&rsquo;environnement de Matplotlib applique une valeur de r\u00e9solution fr\u00e9quemment calibr\u00e9e \u00e0 100 DPI pour l&rsquo;affichage interactif sur les terminaux standards. Si cette granularit\u00e9 s&rsquo;av\u00e8re amplement suffisante pour visualiser des ordres de grandeur sur un \u00e9cran d&rsquo;ordinateur d&rsquo;ancienne g\u00e9n\u00e9ration, elle engendre un cr\u00e9nelage inesth\u00e9tique d\u00e8s lors que l&rsquo;image est ins\u00e9r\u00e9e dans un rapport textuel destin\u00e9 \u00e0 \u00eatre imprim\u00e9 ou affich\u00e9 sur un \u00e9cran contemporain haute densit\u00e9 (\u00e9crans Retina ou 4K). Pour de l&rsquo;impression typographique d&rsquo;articles de recherche, les normes internationales imposent une r\u00e9solution de 300 DPI pour les d\u00e9grad\u00e9s et les trac\u00e9s couleur continus, et culminent couramment \u00e0 600 voire 1200 DPI pour les dessins au trait monochromes (<em>line art<\/em>).<\/p>\n<p>Le contr\u00f4le de cette variable s&rsquo;op\u00e8re directement par l&rsquo;interm\u00e9diaire de l&rsquo;argument <code>dpi<\/code> au sein de l&rsquo;instruction d&rsquo;enregistrement : <code>plt.savefig('analyse.png', dpi=300)<\/code>. Ce param\u00e8tre surcharge ponctuellement la directive globale <code>savefig.dpi<\/code> d\u00e9finie dans les param\u00e8tres de configuration. En allouant une densit\u00e9 accrue, le moteur graphique subdivise la surface d&rsquo;enregistrement en un nombre d\u00e9multipli\u00e9 d&rsquo;\u00e9chantillons, rendant les transitions d&rsquo;intensit\u00e9 quasiment imperceptibles \u00e0 l&rsquo;\u0153il humain et conf\u00e9rant au document final une facture r\u00e9solument professionnelle.<\/p>\n<h3>4.2 Interaction entre figsize et r\u00e9solution d&rsquo;enregistrement<\/h3>\n<p>L&rsquo;une des incompr\u00e9hensions les plus persistantes concernant Matplotlib tient \u00e0 la dissociation conceptuelle entre la g\u00e9om\u00e9trie physique d\u00e9clar\u00e9e de la figure et sa r\u00e9solution de sortie. L&rsquo;argument <code>figsize<\/code>, assign\u00e9 lors de la cr\u00e9ation du conteneur via <code>plt.figure(figsize=(largeur, hauteur))<\/code> ou <code>plt.subplots(figsize=(w, h))<\/code>, exprime syst\u00e9matiquement des dimensions en <strong>pouces physiques<\/strong>, et non en pixels d&rsquo;\u00e9cran. Ce postulat d\u00e9coule des origines historiques de la biblioth\u00e8que, express\u00e9ment con\u00e7ue pour l&rsquo;\u00e9dition de documents imprim\u00e9s sur support papier.<\/p>\n<p>La dimension totale d&rsquo;une image matricielle de sortie r\u00e9sulte donc de l&rsquo;op\u00e9ration arithm\u00e9tique \u00e9l\u00e9mentaire consistant \u00e0 multiplier chaque composante de <code>figsize<\/code> par la valeur du <code>dpi<\/code>. Ainsi, une figure configur\u00e9e avec <code>figsize=(8, 6)<\/code> et enregistr\u00e9e avec un <code>dpi=300<\/code> se mat\u00e9rialisera sous la forme d&rsquo;une grille matricielle mesurant exactement :<\/p>\n<p><em>Largeur en pixels = 8 pouces \u00d7 300 pixels\/pouce = 2400 pixels<\/em><\/p>\n<p><em>Hauteur en pixels = 6 pouces \u00d7 300 pixels\/pouce = 1800 pixels<\/em><\/p>\n<p>Cette relation a des implications esth\u00e9tiques d\u00e9terminantes. Si un analyste souhaite augmenter la d\u00e9finition d&rsquo;une image en multipliant simplement la valeur de <code>figsize<\/code> tout en maintenant le <code>dpi<\/code> constant, il commet une erreur d&rsquo;\u00e9chelle critique : les tailles de polices de caract\u00e8res, les \u00e9paisseurs de lignes et les dimensions des marqueurs g\u00e9om\u00e9triques sont exprim\u00e9es en points typographiques (1 point = 1\/72 pouce). Par cons\u00e9quent, sur une toile aux dimensions artificiellement agrandies, les textes appara\u00eetront proportionnellement minuscules, r\u00e9duisant consid\u00e9rablement la lisibilit\u00e9 g\u00e9n\u00e9rale. Pour conserver une harmonie typographique parfaite, il convient d&rsquo;ajuster <code>figsize<\/code> aux dimensions r\u00e9elles pr\u00e9vues dans le manuscrit cible (par exemple 3,5 pouces pour une colonne de revue), puis d&rsquo;augmenter le <code>dpi<\/code> jusqu&rsquo;\u00e0 atteindre la nettet\u00e9 souhait\u00e9e.<\/p>\n<h3>4.3 Optimisation des performances lors de r\u00e9solutions extr\u00eames<\/h3>\n<p>La tentation d&rsquo;appliquer des valeurs de DPI d\u00e9mesur\u00e9es (1200 ou 2400 DPI) sans discernement peut engendrer des r\u00e9percussions s\u00e9v\u00e8res sur les performances computationnelles et la stabilit\u00e9 de l&rsquo;infrastructure logicielle. La m\u00e9moire vive requise par le backend matriciel pour allouer le canevas de dessin cro\u00eet de mani\u00e8re quadratique avec la r\u00e9solution. En effet, doubler le DPI quadruple le nombre total de pixels, et multiplie d&rsquo;autant la charge de travail impos\u00e9e \u00e0 la m\u00e9moire tampon d&rsquo;\u00e9chantillonnage et aux algorithmes d&rsquo;anticr\u00e9nelage.<\/p>\n<p>Lorsqu&rsquo;un script traite des visualisations massives comprenant des millions d&rsquo;entit\u00e9s g\u00e9om\u00e9triques ou des cartes thermiques de haute dimensionnalit\u00e9, une allocation m\u00e9moire excessive peut saturer la m\u00e9moire vive du syst\u00e8me h\u00f4te et d\u00e9clencher des arr\u00eats d&rsquo;urgence par manque de m\u00e9moire (<em>Out-Of-Memory Killer<\/em>). Pour d\u00e9samorcer ce risque sur des ensembles volumineux, plusieurs strat\u00e9gies pr\u00e9ventives peuvent \u00eatre d\u00e9ploy\u00e9es avec succ\u00e8s :<\/p>\n<ul>\n<li><strong>Rast\u00e9risation s\u00e9lective d&rsquo;artistes graphiques :<\/strong> Matplotlib permet de conserver la structure vectorielle d&rsquo;une figure (titres, polices, axes de coordonn\u00e9es, graduations) tout en ordonnant la rast\u00e9risation exclusive du nuage de points d&rsquo;un graphique de dispersion via l&rsquo;argument <code>rasterized=True<\/code> au sein de <code>plt.scatter()<\/code> ou <code>ax.plot()<\/code>. Le fichier PDF r\u00e9sultant conserve des textes vectoriels parfaits mais int\u00e8gre une matrice de pixels optimis\u00e9e pour la zone de donn\u00e9es centrale.<\/li>\n<li><strong>Calibrage cibl\u00e9 du DPI :<\/strong> Il est rarement opportun de d\u00e9passer 300 DPI pour des visualisations couleur destin\u00e9es \u00e0 un affichage sur support \u00e9lectronique, la plupart des matrices d&rsquo;\u00e9crans ne pouvant pas restituer un niveau de d\u00e9tail sup\u00e9rieur \u00e0 cette densit\u00e9.<\/li>\n<li><strong>Utilisation d&rsquo;environnements d&rsquo;agr\u00e9gation rapide :<\/strong> Pour les s\u00e9ries temporelles g\u00e9antes, l&rsquo;utilisation de biblioth\u00e8ques tierces sp\u00e9cialis\u00e9es dans la d\u00e9cimation de trac\u00e9s avant le passage \u00e0 <code>savefig<\/code> \u00e9vite l&rsquo;\u00e9chantillonnage de motifs invisibles \u00e0 l&rsquo;\u00e9chelle d&rsquo;affichage.<\/li>\n<\/ul>\n<h2>5. Gestion des bordures et cadrage avec bbox_inches<\/h2>\n<h3>5.1 Analyse du rognage automatique via bbox_inches=&rsquo;tight&rsquo;<\/h3>\n<p>Par d\u00e9faut, l&rsquo;algorithme d&rsquo;agencement de Matplotlib attribue une marge p\u00e9riph\u00e9rique statique et relativement g\u00e9n\u00e9reuse autour du canevas de dessin. Cette r\u00e9serve spatiale conventionnelle vise \u00e0 garantir que des \u00e9tiquettes de grande dimension ou des titres pro\u00e9minents ne soient pas imm\u00e9diatement rabot\u00e9s par les contours ext\u00e9rieurs de la toile. Toutefois, dans la majorit\u00e9 des mises en page professionnelles, ce rembourrage par d\u00e9faut g\u00e9n\u00e8re des espaces blancs asym\u00e9triques et superflus qui isolent artificiellement la figure de son environnement \u00e9ditorial et compliquent l&rsquo;alignement harmonieux des blocs de texte dans les colonnes de publication.<\/p>\n<p>Pour neutraliser ces marges inutiles, le param\u00e8tre <code>bbox_inches='tight'<\/code> constitue la solution la plus \u00e9l\u00e9gante et la plus fr\u00e9quemment employ\u00e9e dans la pratique contemporaine de Matplotlib. Lorsque cette directive est transmise \u00e0 la fonction <code>savefig<\/code>, le moteur d&rsquo;exportation interrompt le processus de s\u00e9rialisation standard pour ex\u00e9cuter une routine g\u00e9om\u00e9trique suppl\u00e9mentaire : il calcule la bo\u00eete englobante minimale (<em>bounding box<\/em>) englobant l&rsquo;int\u00e9gralit\u00e9 des artistes graphiques effectivement mat\u00e9rialis\u00e9s sur le canevas (textes, tiques, barres de couleur, l\u00e9gendes et trac\u00e9s).<\/p>\n<p>Une fois cette bo\u00eete englobante pr\u00e9cis\u00e9ment d\u00e9termin\u00e9e dans l&rsquo;espace de coordonn\u00e9es en pouces, la m\u00e9thode tronque la toile physique pour l&rsquo;ajuster aux contours de ce p\u00e9rim\u00e8tre strict. Les espaces vierges st\u00e9riles situ\u00e9s en p\u00e9riph\u00e9rie sont supprim\u00e9s, assurant une int\u00e9gration optimale du graphique au sein des documents cibles sans qu&rsquo;il soit n\u00e9cessaire d&rsquo;effectuer un recadrage manuel laborieux \u00e0 l&rsquo;aide d&rsquo;un logiciel de retouche d&rsquo;image auxiliaire.<\/p>\n<h3>5.2 Contr\u00f4le pr\u00e9cis des marges avec le param\u00e8tre pad_inches<\/h3>\n<p>Bien que le recours \u00e0 <code>bbox_inches='tight'<\/code> offre une solution automatis\u00e9e redoutable pour supprimer les marges superflues, son application brute peut parfois aboutir \u00e0 un cadrage excessivement rigide, dans lequel les extr\u00e9mit\u00e9s des caract\u00e8res typographiques, les exposants math\u00e9matiques ou les indicateurs de graduation viennent effleurer dangereusement le bord physique du fichier. Cette promiscuit\u00e9 graphique est susceptible d&rsquo;entra\u00eener des micro-coupures de quelques pixels lors de l&rsquo;insertion dans des environnements de composition \u00e9ditoriale dot\u00e9s de cadres protecteurs.<\/p>\n<p>Pour pr\u00e9venir cette d\u00e9gradation sans r\u00e9introduire les larges bandes blanches d&rsquo;origine, Matplotlib propose le param\u00e8tre conjoint <code>pad_inches<\/code>, qui n&rsquo;exerce son influence que si <code>bbox_inches='tight'<\/code> est activ\u00e9. Cet argument prend en charge une valeur num\u00e9rique flottante repr\u00e9sentant l&rsquo;\u00e9paisseur exacte, exprim\u00e9e en fractions de pouce, de la bordure r\u00e9siduelle \u00e0 maintenir tout autour de la bo\u00eete englobante calcul\u00e9e :<\/p>\n<p>Par d\u00e9faut, la valeur assign\u00e9e \u00e0 <code>pad_inches<\/code> est de <code>0.1<\/code> pouce (soit environ 2,54 millim\u00e8tres). Pour un compactage extr\u00eame, le d\u00e9veloppeur peut assigner une valeur inf\u00e9rieure, telle que <code>pad_inches=0.02<\/code>. Inversement, pour a\u00e9rer subtilement un sch\u00e9ma de synth\u00e8se destin\u00e9 \u00e0 \u00eatre imprim\u00e9 de mani\u00e8re autonome, une marge de <code>pad_inches=0.2<\/code> garantit une transition visuelle \u00e9quilibr\u00e9e et reposante pour l&rsquo;\u0153il du lecteur.<\/p>\n<h3>5.3 R\u00e9solution des troncatures de l\u00e9gendes et d&rsquo;\u00e9tiquettes d&rsquo;axes<\/h3>\n<p>L&rsquo;un des d\u00e9fis d&rsquo;agencement les plus caract\u00e9ristiques survient lorsqu&rsquo;une l\u00e9gende complexe comportant de multiples descripteurs textuels est d\u00e9port\u00e9e d\u00e9lib\u00e9r\u00e9ment \u00e0 l&rsquo;ext\u00e9rieur de la surface de trac\u00e9 centrale, par exemple en exploitant la coordonn\u00e9e relative <code>bbox_to_anchor=(1.05, 1)<\/code>. Dans le comportement par d\u00e9faut de <code>savefig<\/code>, les dimensions g\u00e9om\u00e9triques de la figure demeurent fig\u00e9es sur la bo\u00eete initiale de l&rsquo;axe : la l\u00e9gende ext\u00e9rieure se retrouve alors brutalement tronqu\u00e9e, voire compl\u00e8tement expuls\u00e9e en dehors des fronti\u00e8res de l&rsquo;image finale export\u00e9e.<\/p>\n<p>L&rsquo;adjonction syst\u00e9matique de l&rsquo;argument <code>bbox_inches='tight'<\/code> r\u00e9sout spontan\u00e9ment la majorit\u00e9 de ces anomalies de positionnement, dans la mesure o\u00f9 le gestionnaire de bo\u00eete englobante int\u00e8gre nativement la g\u00e9om\u00e9trie de la l\u00e9gende dans son calcul d&rsquo;extension spatiale globale. N\u00e9anmoins, pour des compositions sophistiqu\u00e9es impliquant des annotations flottantes, des textes libres cr\u00e9\u00e9s via <code>plt.text()<\/code> ou des axes auxiliaires personnalis\u00e9s, le moteur d&rsquo;\u00e9valuation peut parfois omettre certains \u00e9l\u00e9ments qui ne sont pas explicitement enregistr\u00e9s dans l&rsquo;arbre hi\u00e9rarchique standard de la figure.<\/p>\n<p>Dans ces configurations complexes, l&rsquo;analyste peut mobiliser l&rsquo;argument sp\u00e9cialis\u00e9 <code>bbox_extra_artists<\/code>. Ce param\u00e8tre accepte un conteneur it\u00e9rable (liste ou tuple) regroupant l&rsquo;ensemble des instances d&rsquo;artistes graphiques devant imp\u00e9rativement \u00eatre pris en compte lors de l&rsquo;\u00e9valuation de la bo\u00eete englobante finale :<\/p>\n<p><code>lgd = ax.legend(bbox_to_anchor=(1.05, 1), loc='upper left')<\/code><\/p>\n<p><code>plt.savefig('sortie.png', bbox_extra_artists=(lgd,), bbox_inches='tight')<\/code><\/p>\n<p>Cette articulation garantit que l&rsquo;image s\u00e9rialis\u00e9e s&rsquo;\u00e9largira pr\u00e9cis\u00e9ment de la largeur requise pour accueillir l&rsquo;encadr\u00e9 descriptif sans alt\u00e9rer les proportions internes des axes de donn\u00e9es.<\/p>\n<figure class=\"wpt-preserved-image\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/french.arabpsychology.com\/wp-content\/uploads\/2026\/09\/matplot_save3.png\" alt=\"\" \/><\/figure>\n<h2>6. Personnalisation de l&rsquo;arri\u00e8re-plan et de la transparence<\/h2>\n<h3>6.1 Exportation de trac\u00e9s avec arri\u00e8re-plan transparent<\/h3>\n<p>Dans les contextes de diffusion contemporains, tels que les pr\u00e9sentations magistrales projet\u00e9es sur des arri\u00e8re-plans color\u00e9s, les tableaux de bord num\u00e9riques alternant entre modes clair et sombre, ou l&rsquo;int\u00e9gration au sein de supports multim\u00e9dias, la pr\u00e9sence d&rsquo;un fond blanc rectangulaire opaque autour d&rsquo;un graphique s&rsquo;av\u00e8re souvent visuellement disruptive. Matplotlib permet de rem\u00e9dier \u00e0 cette contrainte en prenant nativement en charge la transparence des couches d&rsquo;arri\u00e8re-plan lors de l&rsquo;exportation sur disque.<\/p>\n<p>La m\u00e9thode canonique pour activer cette propri\u00e9t\u00e9 consiste \u00e0 positionner l&rsquo;argument bool\u00e9en <code>transparent=True<\/code> au sein de l&rsquo;appel : <code>plt.savefig('graphique_translucide.png', transparent=True)<\/code>. L&rsquo;effet technique imm\u00e9diat de ce param\u00e8tre r\u00e9side dans la modification des canaux alpha associ\u00e9s \u00e0 la fois au rectangle global de la figure (<em>figure patch<\/em>) et aux rectangles d\u00e9limitant la surface de chacun des sous-axes (<em>axes patch<\/em>). Ces canaux alpha sont alors instanci\u00e9s \u00e0 la valeur z\u00e9ro, rendant ces surfaces parfaitement transparentes.<\/p>\n<p>Il est fondamental de rappeler que la restitution effective de cette transparence d\u00e9pend strictement du format d&rsquo;enregistrement s\u00e9lectionn\u00e9. Seuls les formats prenant en charge un canal alpha d\u00e9di\u00e9 \u2014 au premier rang desquels figurent le PNG pour les formats matriciels, ainsi que le SVG et le PDF pour les formats vectoriels \u2014 sont en mesure de consigner cette information d&rsquo;opacit\u00e9. L&rsquo;exportation d&rsquo;un graphique avec l&rsquo;attribut <code>transparent=True<\/code> vers un format d\u00e9pourvu de canal alpha, comme le standard JPEG, entra\u00eenera une substitution forc\u00e9e par une couleur de remplissage par d\u00e9faut (g\u00e9n\u00e9ralement le blanc ou le noir), annihilant l&rsquo;effet escompt\u00e9.<\/p>\n<h3>6.2 Modification explicite des couleurs de fond (facecolor et edgecolor)<\/h3>\n<p>Au-del\u00e0 de la transparence totale, la personnalisation esth\u00e9tique rigoureuse exige fr\u00e9quemment d&rsquo;attribuer des teintes d&rsquo;arri\u00e8re-plan pr\u00e9cises, align\u00e9es sur la charte graphique d&rsquo;une institution acad\u00e9mique ou d&rsquo;une revue sp\u00e9cialis\u00e9e. Deux param\u00e8tres primordiaux pilotent ces propri\u00e9t\u00e9s lors de la s\u00e9rialisation : <code>facecolor<\/code>, qui r\u00e9git la couleur du fond plein, et <code>edgecolor<\/code>, qui d\u00e9termine la couleur du liser\u00e9 p\u00e9riph\u00e9rique encadrant la figure.<\/p>\n<p>Une distinction fondamentale doit \u00eatre \u00e9tablie entre l&rsquo;arri\u00e8re-plan global de l&rsquo;objet <code>Figure<\/code> et l&rsquo;arri\u00e8re-plan local de l&rsquo;objet <code>Axes<\/code>. Si le d\u00e9veloppeur invoque <code>plt.savefig('fond_personnalise.png', facecolor='#f4f4f4')<\/code>, seule l&rsquo;enveloppe englobante globale sera teint\u00e9e avec ce gris tr\u00e8s p\u00e2le, tandis que la bo\u00eete de trac\u00e9 interne conservera la teinte qui lui a \u00e9t\u00e9 attribu\u00e9e lors de son instanciation (par d\u00e9faut, le blanc pur, d\u00e9fini par <code>ax.set_facecolor()<\/code> ou par la directive <code>axes.facecolor<\/code>).<\/p>\n<p>Pour uniformiser totalement une visualisation et \u00e9viter des dissonances chromatiques, il convient d&rsquo;orchestrer ces param\u00e8tres de mani\u00e8re coh\u00e9rente, soit en amont via les m\u00e9thodes propres aux axes, soit directement lors de l&rsquo;exportation. L&rsquo;exemple suivant illustre une telle harmonisation chromatique :<\/p>\n<p><code>fig, ax = plt.subplots(facecolor='#eaeaf2')<\/code><\/p>\n<p><code>ax.set_facecolor('#ffffff')<\/code><\/p>\n<p><code>fig.savefig('harmonise.png', facecolor=fig.get_facecolor(), edgecolor='none')<\/code><\/p>\n<p>Cette approche garantit une continuit\u00e9 esth\u00e9tique irr\u00e9prochable entre le canevas d&rsquo;observation et l&rsquo;art\u00e9fact num\u00e9rique sauvegard\u00e9.<\/p>\n<h3>6.3 Pr\u00e9servation du contraste et accessibilit\u00e9 visuelle<\/h3>\n<p>L&rsquo;introduction d&rsquo;arri\u00e8re-plans transparents ou fortement color\u00e9s soul\u00e8ve une probl\u00e9matique critique d&rsquo;accessibilit\u00e9 visuelle et de conservation du contraste. Un trac\u00e9 g\u00e9n\u00e9r\u00e9 avec des polices de caract\u00e8res noires et des traits d&rsquo;axes de faible \u00e9paisseur appara\u00eetra de mani\u00e8re optimale sur un fond blanc au sein d&rsquo;un article imprim\u00e9. En revanche, si ce m\u00eame trac\u00e9 est export\u00e9 avec un arri\u00e8re-plan transparent et projet\u00e9 sur un th\u00e8me sombre (<em>dark mode<\/em>) dans une diapositive de pr\u00e9sentation, l&rsquo;int\u00e9gralit\u00e9 des axes, des graduations et du texte deviendra invisible, se confondant avec le fond d&rsquo;\u00e9cran.<\/p>\n<p>L&rsquo;application des crit\u00e8res universels d&rsquo;accessibilit\u00e9 (notamment les directives internationales WCAG relatives aux ratios de contraste) requiert d&rsquo;anticiper le contexte de consultation de la figure. Si l&rsquo;art\u00e9fact doit \u00eatre export\u00e9 en transparence pour des contextes d&rsquo;affichage h\u00e9t\u00e9rog\u00e8nes, il est imp\u00e9ratif de reconfigurer dynamiquement la palette chromatique de l&rsquo;ensemble des \u00e9l\u00e9ments p\u00e9riph\u00e9riques :<\/p>\n<ul>\n<li>\u00c9tablir un contraste suffisant (ratio minimal de 4.5:1) entre les \u00e9l\u00e9ments vectoriels (lignes, marqueurs) et le support d&rsquo;affichage suppos\u00e9.<\/li>\n<li>Surcharger si n\u00e9cessaire la couleur des tiques d&rsquo;axes, des bordures (<em>spines<\/em>) et des \u00e9tiquettes typographiques via <code>ax.tick_params(colors='...')<\/code> et <code>ax.xaxis.label.set_color('...')<\/code> pour leur conf\u00e9rer des teintes neutres visibles sur fonds clairs comme sombres.<\/li>\n<li>Proscrire l&rsquo;usage exclusif du canal de couleur pour transmettre une information quantitative vitale, en combinant des variations de styles de lignes (pointill\u00e9s, tirets) et des g\u00e9om\u00e9tries de marqueurs diff\u00e9renci\u00e9es (cercles, triangles, losanges).<\/li>\n<\/ul>\n<h2>7. Approche orient\u00e9e objet : fig.savefig contre plt.savefig<\/h2>\n<h3>7.1 Limitations de l&rsquo;approche imp\u00e9rative globale dans les scripts complexes<\/h3>\n<p>L&rsquo;interface imp\u00e9rative de Matplotlib, gouvern\u00e9e par l&rsquo;espace de noms <code>matplotlib.pyplot<\/code>, a largement contribu\u00e9 \u00e0 la d\u00e9mocratisation de la biblioth\u00e8que en procurant une syntaxe concise et famili\u00e8re aux scientifiques habitu\u00e9s aux environnements de calcul matriciel direct. N\u00e9anmoins, ce confort syntaxique initial repose sur une gestion dissimul\u00e9e d&rsquo;\u00e9tats globaux : chaque commande modifie implicitement le conteneur actif sans que les liens de causalit\u00e9 soient formellement explicit\u00e9s dans le code source.<\/p>\n<p>Cette opacit\u00e9 structurelle r\u00e9v\u00e8le des faiblesses majeures d\u00e8s lors que les projets logiciels gagnent en complexit\u00e9. Dans des architectures modulaires, des scripts d&rsquo;ing\u00e9nierie logicielle ex\u00e9cutant des pipelines multithread\u00e9s, ou des fonctions appel\u00e9es de mani\u00e8re it\u00e9rative, l&rsquo;approche imp\u00e9rative globale engendre de redoutables effets de bord. Une fonction auxiliaire peut subrepticeusement modifier la figure active \u00e0 l&rsquo;insu de la routine appelante. D\u00e8s lors, l&rsquo;ex\u00e9cution de <code>plt.savefig()<\/code> risque d&rsquo;exporter une composition alt\u00e9r\u00e9e ou un panneau graphique qui ne correspond plus \u00e0 l&rsquo;\u00e9tat attendu, introduisant des bogues silencieux et difficiles \u00e0 diagnostiquer.<\/p>\n<p>De plus, l&rsquo;approche imp\u00e9rative entrave la r\u00e9utilisabilit\u00e9 du code et sa testabilit\u00e9 unitaire. Elle force l&rsquo;analyste \u00e0 concevoir ses scripts comme une succession lin\u00e9aire d&rsquo;instructions proc\u00e9durales, interdisant le passage propre d&rsquo;instances graphiques autonomes entre diff\u00e9rentes fonctions d&rsquo;analyse et de g\u00e9n\u00e9ration de rapports.<\/p>\n<h3>7.2 Utilisation de l&rsquo;objet Figure pour un enregistrement explicite et isol\u00e9<\/h3>\n<p>Pour s&rsquo;affranchir d\u00e9finitivement des ambigu\u00eft\u00e9s inh\u00e9rentes \u00e0 la machine \u00e0 \u00e9tats globale, la communaut\u00e9 scientifique recommande unanimement l&rsquo;adoption de l&rsquo;interface orient\u00e9e objet (OO). Dans ce paradigme architectural, la cr\u00e9ation d&rsquo;une visualisation d\u00e9bute par l&rsquo;instanciation conjointe et explicite du conteneur parent et de ses sous-espaces de projection, classiquement via la fonction utilitaire : <code>fig, ax = plt.subplots()<\/code>.<\/p>\n<p>D\u00e8s cet instant, la totalit\u00e9 des op\u00e9rations de configuration s&rsquo;ex\u00e9cute directement par le biais des m\u00e9thodes encapsul\u00e9es dans ces instances d&rsquo;objets : <code>ax.plot()<\/code>, <code>ax.set_title()<\/code>, <code>ax.set_xlabel()<\/code>. Corr\u00e9lativement, la s\u00e9rialisation sur disque s&rsquo;\u00e9mancipe de l&rsquo;espace de noms global pour devenir une m\u00e9thode directe de l&rsquo;objet conteneur : <code>fig.savefig('analyse_isolee.pdf')<\/code>. Cette \u00e9criture isole rigoureusement l&rsquo;op\u00e9ration :<\/p>\n<p>L&rsquo;avantage conceptuel est consid\u00e9rable : l&rsquo;objet <code>fig<\/code> poss\u00e8de une identit\u00e9 m\u00e9moire unique et autonome. Quelles que soient les op\u00e9rations graphiques d\u00e9clench\u00e9es parall\u00e8lement dans d&rsquo;autres pans du programme ou au sein de boucles concurrentes, l&rsquo;instruction <code>fig.savefig()<\/code> garantit l&rsquo;exportation stricte et exclusive des \u00e9l\u00e9ments attach\u00e9s \u00e0 cette instance particuli\u00e8re. Ce formalisme favorise l&rsquo;\u00e9criture d&rsquo;un code Python propre, lisible, modulaire et hautement maintenable, conforme aux standards industriels du g\u00e9nie logiciel.<\/p>\n<h3>7.3 Gestion multi-figures et sauvegarde diff\u00e9renci\u00e9e<\/h3>\n<p>La puissance de l&rsquo;approche orient\u00e9e objet se manifeste avec \u00e9clat lors de la gestion conjointe de multiples figures graphiques au sein d&rsquo;un m\u00eame environnement d&rsquo;ex\u00e9cution. Imaginons un pipeline analytique qui, \u00e0 partir d&rsquo;un m\u00eame jeu de donn\u00e9es exp\u00e9rimentales, doit g\u00e9n\u00e9rer simultan\u00e9ment une vue globale sous forme de distributions statistiques et une vue microscopique d\u00e9taillant des corr\u00e9lations de s\u00e9ries temporelles, chacune devant \u00eatre export\u00e9e selon des dimensions physiques et des r\u00e9solutions divergentes.<\/p>\n<p>Dans un tel sc\u00e9nario, la cr\u00e9ation de descripteurs d&rsquo;instances distincts permet de manipuler les canevas en totale ind\u00e9pendance synchrone :<\/p>\n<p><code>fig_macro, ax_macro = plt.subplots(figsize=(10, 6))<\/code><\/p>\n<p><code>fig_micro, ax_micro = plt.subplots(figsize=(5, 4))<\/code><\/p>\n<p>Le traitement analytique peut alors alimenter l&rsquo;un ou l&rsquo;autre des conteneurs sans jamais n\u00e9cessiter de permutation manuelle de la figure active :<\/p>\n<p><code>ax_macro.hist(donnees, bins=50, color='steelblue')<\/code><\/p>\n<p><code>ax_micro.plot(donnees[:100], color='crimson')<\/code><\/p>\n<p>L&rsquo;enregistrement diff\u00e9renci\u00e9 s&rsquo;effectue ensuite avec une parfaite clart\u00e9 s\u00e9mantique :<\/p>\n<p><code>fig_macro.savefig('macro_distribution.pdf', bbox_inches='tight')<\/code><\/p>\n<p><code>fig_micro.savefig('micro_zoom.png', dpi=600, transparent=True)<\/code><\/p>\n<p>Chaque fichier d&rsquo;exportation refl\u00e8te scrupuleusement les attributs qui lui ont \u00e9t\u00e9 d\u00e9di\u00e9s, sans aucune contamination crois\u00e9e d&rsquo;\u00e9tat, illustrant la sup\u00e9riorit\u00e9 op\u00e9rationnelle du mod\u00e8le orient\u00e9 objet.<\/p>\n<h2>8. Automatisation et pipelines d&rsquo;exportation par lots<\/h2>\n<h3>8.1 It\u00e9ration programm\u00e9e sur des jeux de donn\u00e9es volumineux<\/h3>\n<p>Dans les environnements industriels de production de donn\u00e9es \u2014 tels que la bio-informatique, la physique des particules ou l&rsquo;analyse financi\u00e8re haute fr\u00e9quence \u2014, les analystes sont r\u00e9guli\u00e8rement confront\u00e9s \u00e0 la n\u00e9cessit\u00e9 de g\u00e9n\u00e9rer des centaines ou des milliers de visualisations normalis\u00e9es \u00e0 partir de corpus de donn\u00e9es massifs. La standardisation de ces exports exige la conception de routines it\u00e9ratives automatis\u00e9es capables de parcourir des structures de donn\u00e9es complexes et de reproduire rigoureusement la m\u00eame charte graphique pour chaque entit\u00e9 observ\u00e9e.<\/p>\n<p>Pour assurer la solidit\u00e9 d&rsquo;une telle boucle de g\u00e9n\u00e9ration par lots (<em>batch processing<\/em>), il est crucial de param\u00e9trer dynamiquement les variables de trac\u00e9 et d&rsquo;enregistrement. Les param\u00e8tres stylistiques majeurs (\u00e9chelles, palettes de couleurs, dimensions de toiles) doivent \u00eatre isol\u00e9s au sein de structures de configuration ou de dictionnaires r\u00e9utilisables, garantissant une coh\u00e9rence visuelle absolue d&rsquo;un graphique \u00e0 l&rsquo;autre au sein de la collection produite.<\/p>\n<p>L&rsquo;automatisation permet en outre d&rsquo;injecter des conditions logiques lors de la phase d&rsquo;exportation : par exemple, n&rsquo;enregistrer une figure sous haute r\u00e9solution que si un indicateur statistique critique (comme une valeur de p-value ou un seuil de d\u00e9passement d&rsquo;alerte) est franchi dans la cohorte analys\u00e9e, r\u00e9duisant ainsi la charge d&rsquo;\u00e9criture sur le disque dur et ciblant pr\u00e9cis\u00e9ment les ph\u00e9nom\u00e8nes d&rsquo;int\u00e9r\u00eat.<\/p>\n<h3>8.2 Nomenclature dynamique et organisation hi\u00e9rarchique des fichiers<\/h3>\n<p>La p\u00e9rennit\u00e9 d&rsquo;une infrastructure d&rsquo;archivage graphique automatis\u00e9e repose fondamentalement sur la rigueur de sa politique de nommage et sur la structure hi\u00e9rarchique des dossiers cibles. L&rsquo;enregistrement anarchique de milliers de fichiers anonymes dans un r\u00e9pertoire unique constitue une d\u00e9faillance m\u00e9thodologique qui entrave toute exploitation ult\u00e9rieure par des \u00e9quipes de recherche ou des syst\u00e8mes tiers.<\/p>\n<p>L&rsquo;exploitation des cha\u00eenes de caract\u00e8res format\u00e9es de Python (<em>f-strings<\/em>), combin\u00e9e aux abstractions de <code>pathlib.Path<\/code>, permet de forger des nomenclatures dynamiques syst\u00e9matiques, int\u00e9grant les m\u00e9tadonn\u00e9es exp\u00e9rimentales critiques directement dans le nom de chaque fichier : identifiant de l&rsquo;\u00e9chantillon, date d&rsquo;acquisition normalis\u00e9e (ISO 8601), type d&rsquo;ajustement algorithmique et version du pipeline de calcul. Par exemple :<\/p>\n<p><code>nom_fichier = f\"patient_{id_patient:04d}_spectre_{date_analyse}_{modele}_v{version}.png\"<\/code><\/p>\n<p>Cette rigueur doit se doubler d&rsquo;une compartimentation spatiale sur le disque dur, organisant les graphismes dans des sous-r\u00e9pertoires th\u00e9matiques d\u00e9di\u00e9s (par exemple par cohorte, par variable ind\u00e9pendante ou par niveau d&rsquo;agr\u00e9gation temporelle). L&rsquo;application d&rsquo;un hachage ou d&rsquo;une indexation syst\u00e9matique \u00e9vite toute collision de noms et garantit que l&rsquo;arborescence des figures demeure imm\u00e9diatement interrogeable par des scripts d&rsquo;indexation automatis\u00e9s.<\/p>\n<figure class=\"wpt-preserved-image\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/french.arabpsychology.com\/wp-content\/uploads\/2026\/09\/matplot_save4.png\" alt=\"\" \/><\/figure>\n<h3>8.3 Gestion de la m\u00e9moire et lib\u00e9ration des ressources syst\u00e8me<\/h3>\n<p>L&rsquo;\u00e9cueil le plus destructeur au sein d&rsquo;un pipeline d&rsquo;exportation massive r\u00e9side dans la fuite progressive de m\u00e9moire vive cons\u00e9cutive \u00e0 l&rsquo;accumulation d&rsquo;instances de figures non lib\u00e9r\u00e9es. Par d\u00e9faut, lorsqu&rsquo;une figure est g\u00e9n\u00e9r\u00e9e par le truchement des fonctions de Matplotlib, le gestionnaire interne de fen\u00eatrage (<code>matplotlib._pylab_helpers.Gcf<\/code>) conserve une r\u00e9f\u00e9rence forte vers chaque objet <code>Figure<\/code> dans un dictionnaire global afin de pouvoir le restituer ult\u00e9rieurement si une commande interactive venait \u00e0 \u00eatre appel\u00e9e.<\/p>\n<p>Dans le cadre d&rsquo;un traitement par lots g\u00e9n\u00e9rant des milliers de graphiques, ces r\u00e9f\u00e9rences emp\u00eachent le ramasse-miettes (<em>garbage collector<\/em>) de Python de recycler la m\u00e9moire allou\u00e9e aux canevas, aux structures d&rsquo;axes et aux listes g\u00e9om\u00e9triques associ\u00e9es. La m\u00e9moire vive consomm\u00e9e enfle continuellement jusqu&rsquo;\u00e0 l&rsquo;apparition du signal d&rsquo;avertissement caract\u00e9ristique \u00e9mis par la biblioth\u00e8que :<\/p>\n<p><code>RuntimeWarning: More than 20 figures have been opened. Figures created through the pyplot interface are retained until explicitly closed and may consume too much memory.<\/code><\/p>\n<p>Pour neutraliser ce p\u00e9ril d&rsquo;\u00e9puisement des ressources syst\u00e8me, il est imp\u00e9ratif d&rsquo;int\u00e9grer la destruction explicite de l&rsquo;instance graphique d\u00e8s que l&rsquo;op\u00e9ration d&rsquo;enregistrement sur disque est parachev\u00e9e. Cette lib\u00e9ration s&rsquo;effectue au moyen de la commande <code>plt.close(fig)<\/code> :<\/p>\n<p><code>for i, lot in enumerate(collection_donnees):<\/code><\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;<code>fig, ax = plt.subplots()<\/code><\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;<code>ax.plot(lot)<\/code><\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;<code>fig.savefig(repertoire_sortie \/ f\"trac\u00e9_{i}.png\")<\/code><\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;<code>plt.close(fig)<\/code><\/p>\n<p>L&rsquo;appel de cette m\u00e9thode d\u00e9connecte le canevas de la machine d&rsquo;\u00e9tats globale, lib\u00e8re les moteurs de rendu associ\u00e9s et permet la restitution imm\u00e9diate de la m\u00e9moire au syst\u00e8me d&rsquo;exploitation h\u00f4te, assurant ainsi la p\u00e9rennit\u00e9 de l&rsquo;ex\u00e9cution sur des dur\u00e9es ind\u00e9termin\u00e9es.<\/p>\n<h2>9. M\u00e9tadonn\u00e9es, polices et int\u00e9gration dans des publications acad\u00e9miques<\/h2>\n<h3>9.1 Inclusion de m\u00e9tadonn\u00e9es descriptives dans les fichiers PDF et PNG<\/h3>\n<p>L&rsquo;int\u00e9grit\u00e9 d&rsquo;un art\u00e9fact graphique scientifique ne se limite pas \u00e0 sa simple apparence visuelle ; elle englobe \u00e9galement les m\u00e9tadonn\u00e9es contextuelles qui documentent sa gen\u00e8se. L&rsquo;omission de ces informations transforme les images en donn\u00e9es orphelines, dont l&rsquo;attribution, la date pr\u00e9cise d&rsquo;extraction et les conditions d&rsquo;acquisition deviennent impossibles \u00e0 retracer avec certitude \u00e0 long terme. Pour satisfaire aux exigences contemporaines de la science ouverte (principes FAIR : Facile \u00e0 trouver, Accessible, Interop\u00e9rable, R\u00e9utilisable), Matplotlib offre des m\u00e9canismes int\u00e9gr\u00e9s permettant d&rsquo;incorporer des m\u00e9tadonn\u00e9es directement dans la structure binaire des fichiers export\u00e9s.<\/p>\n<p>Lors d&rsquo;une sauvegarde au format PDF ou PNG, l&rsquo;argument <code>metadata<\/code> accepte un dictionnaire de paires cl\u00e9-valeur renseignant les standards de description documentaire. Pour le format PDF, les cl\u00e9s normalis\u00e9es incluent <code>'Title'<\/code>, <code>'Author'<\/code>, <code>'Subject'<\/code>, <code>'Keywords'<\/code>, <code>'Creator'<\/code> et <code>'CreationDate'<\/code> :<\/p>\n<p><code>metas_pdf = {<\/code><\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;<code>'Author': 'Dr. H. Vance',<\/code><\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;<code>'Title': 'Cin\u00e9tique de d\u00e9composition isotherme',<\/code><\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;<code>'Keywords': 'Cin\u00e9tique, Thermodynamique, Python'<\/code><\/p>\n<p><code>}<\/code><\/p>\n<p><code>fig.savefig('spectre.pdf', metadata=metas_pdf)<\/code><\/p>\n<p>Dans le cas d&rsquo;une sortie au standard PNG, le dictionnaire est consign\u00e9 au sein des blocs textuels auxiliaires d&rsquo;en-t\u00eate (<em>PNG tEXt chunks<\/em>), acceptant des champs descriptifs libres ou conformes au sch\u00e9ma Dublin Core. L&rsquo;int\u00e9gration syst\u00e9matique de ces descripteurs permet aux moteurs de recherche bibliographiques et aux syst\u00e8mes de gestion \u00e9lectronique de documents de cataloguer automatiquement les figures g\u00e9n\u00e9r\u00e9es sans n\u00e9cessiter une extraction optique complexe.<\/p>\n<h3>9.2 Gestion des polices vectorielles et incorporation typographique<\/h3>\n<p>L&rsquo;un des cauchemars r\u00e9currents des chercheurs soumettant un manuscrit \u00e0 une revue internationale r\u00e9side dans le rejet de leurs illustrations vectorielles au motif que les polices de caract\u00e8res ne sont pas incorpor\u00e9es (<em>fonts not embedded<\/em>) ou reposent sur des formats de glyphes obsol\u00e8tes. Par d\u00e9faut, pour des raisons de compatibilit\u00e9 historique avec les anciennes imprimantes PostScript, Matplotlib a longtemps privil\u00e9gi\u00e9 l&rsquo;exportation des textes sous la forme de polices Type 3 dans les fichiers PostScript et PDF. Les polices Type 3 vectorisent les caract\u00e8res sous forme de trac\u00e9s g\u00e9n\u00e9riques d&rsquo;instructions \u00e9l\u00e9mentaires de dessin, ce qui prive le document de descripteurs textuels r\u00e9els et rend le texte non s\u00e9lectionnable et flou dans les visionneuses modernes.<\/p>\n<p>Les presses scientifiques contemporaines (telles que l&rsquo;IEEE, Nature Publishing Group ou Elsevier) exigent imp\u00e9rativement l&rsquo;incorporation int\u00e9grale de polices TrueType ou Type 42 (PostScript habillant du TrueType). Pour forcer Matplotlib \u00e0 se conformer \u00e0 ces standards \u00e9ditoriaux d&rsquo;excellence, il est indispensable de configurer les variables d&rsquo;environnement du dictionnaire <code>rcParams<\/code> avant toute phase d&rsquo;exportation :<\/p>\n<p><code>import matplotlib as mpl<\/code><\/p>\n<p><code>mpl.rcParams['pdf.fonttype'] = 42<\/code><\/p>\n<p><code>mpl.rcParams['ps.fonttype'] = 42<\/code><\/p>\n<p>L&rsquo;assignation de la valeur num\u00e9rique <code>42<\/code> impose l&rsquo;injection int\u00e9grale des glyphes TrueType dans le flux binaire du PDF produit. D\u00e8s lors, le texte de la figure demeure parfaitement vectoris\u00e9, autorise la recherche plein texte au sein du document final, permet le copier-coller des \u00e9tiquettes et garantit une fid\u00e9lit\u00e9 typographique absolue lors du tirage sur presse grand format.<\/p>\n<p>Parall\u00e8lement, pour une symbiose math\u00e9matique parfaite avec les articles compos\u00e9s sous LaTeX, il est possible d&rsquo;activer le moteur de compilation externe via <code>mpl.rcParams['text.usetex'] = True<\/code>. Matplotlib d\u00e9l\u00e8gue alors la composition de chaque formule math\u00e9matique au compilateur LaTeX de la machine locale, harmonisant la typographie des \u00e9quations du graphique avec celle du texte principal de la publication.<\/p>\n<h3>9.3 Normalisation des figures selon les guides aux auteurs<\/h3>\n<p>L&rsquo;acceptation d&rsquo;un article scientifique est subordonn\u00e9e au respect scrupuleux des guides aux auteurs \u00e9dict\u00e9s par les soci\u00e9t\u00e9s savantes. Ces directives fixent des limites dimensionnelles strictes pour les figures, articul\u00e9es autour du gabarit de mise en page de la revue : typiquement une largeur de colonne simple d&rsquo;environ 80 \u00e0 90 mm (3,15 \u00e0 3,54 pouces), une largeur de colonne interm\u00e9diaire d&rsquo;environ 120 mm (4,72 pouces) et une largeur de pleine page double colonne d&rsquo;environ 170 \u00e0 180 mm (6,69 \u00e0 7,08 pouces).<\/p>\n<p>Pour pr\u00e9parer une figure conforme, l&rsquo;analyste doit imp\u00e9rativement d\u00e9finir les dimensions physiques dans <code>figsize<\/code> en respectant scrupuleusement ces largeurs limites, converties en pouces. Concevoir une figure \u00e0 une taille de 15 pouces en pr\u00e9voyant que la revue se chargera de la r\u00e9duire \u00e0 3,5 pouces constitue une faute m\u00e9thodologique majeure : la r\u00e9duction proportionnelle comprimera les textes de taille 10 points en caract\u00e8res minuscules de moins de 3 points, devenant illisibles et entra\u00eenant un refus imm\u00e9diat des \u00e9preuves par le secr\u00e9tariat de r\u00e9daction.<\/p>\n<p>Il importe d&rsquo;ajuster harmonieusement les \u00e9chelles relatives : les \u00e9tiquettes des axes et les titres doivent \u00eatre calibr\u00e9s entre 8 et 10 points, tandis que les rep\u00e8res de graduation (<em>tick labels<\/em>) ne devraient jamais descendre en de\u00e7\u00e0 de 6 \u00e0 7 points. Enfin, pour l&rsquo;impression finale quadrichromique, une vigilance particuli\u00e8re doit \u00eatre port\u00e9e au syst\u00e8me de couleurs : alors que Matplotlib op\u00e8re nativement dans l&rsquo;espace RVB (optimis\u00e9 pour les \u00e9crans), les imprimeries op\u00e8rent dans l&rsquo;espace soustractif CMJN (Cyan, Magenta, Jaune, Noir). Une conversion contr\u00f4l\u00e9e vers un profil colorim\u00e9trique certifi\u00e9 pr\u00e9vient les distorsions chromatiques inopin\u00e9es.<\/p>\n<h2>10. R\u00e9solution des erreurs communes et \u00e9cueils techniques<\/h2>\n<h3>10.1 L&rsquo;erreur classique de l&rsquo;image blanche ou vide<\/h3>\n<p>L&rsquo;apparition d&rsquo;un fichier image parfaitement int\u00e8gre sur le plan du syst\u00e8me de fichiers mais enti\u00e8rement immacul\u00e9 de blanc repr\u00e9sente sans conteste l&rsquo;anomalie la plus r\u00e9currente rencontr\u00e9e par les utilisateurs de la biblioth\u00e8que. Comme explicit\u00e9 dans l&rsquo;analyse du cycle de vie de la figure (Section 2.2), l&rsquo;ordonnancement s\u00e9quentiel invers\u00e9 consistant \u00e0 appeler <code>plt.show()<\/code> avant <code>plt.savefig()<\/code> constitue la cause primaire de ce ph\u00e9nom\u00e8ne dans plus de quatre-vingt-dix pour cent des occurrences observ\u00e9es.<\/p>\n<p>N\u00e9anmoins, d&rsquo;autres m\u00e9canismes d&rsquo;\u00e9chec plus sournois peuvent engendrer une image vide, m\u00eame en l&rsquo;absence de tout appel \u00e0 <code>show()<\/code> :<\/p>\n<ul>\n<li><strong>D\u00e9synchronisation entre objets dans l&rsquo;approche orient\u00e9e objet :<\/strong> L&rsquo;utilisateur instancie une figure via <code>fig, ax = plt.subplots()<\/code>, trace des courbes sur un objet axes tiers, mais appelle <code>fig2.savefig()<\/code> ou omet d&rsquo;associer l&rsquo;axe modifi\u00e9 \u00e0 la figure sauvegard\u00e9e.<\/li>\n<li><strong>Limites d&rsquo;axes aberrantes :<\/strong> L&rsquo;application erron\u00e9e de m\u00e9thodes d&rsquo;\u00e9chelles extr\u00eames, telles que <code>ax.set_xlim(0, 1)<\/code> alors que la s\u00e9rie de donn\u00e9es se situe entre 10 000 et 50 000, repousse la totalit\u00e9 des entit\u00e9s trac\u00e9es en dehors du volume de visualisation visible, g\u00e9n\u00e9rant un graphique d\u00e9sertique.<\/li>\n<li><strong>Rast\u00e9risation d&rsquo;objets invisibles ou transparents :<\/strong> L&rsquo;assignation involontaire d&rsquo;une valeur nulle au canal alpha (<code>alpha=0.0<\/code>) sur un ensemble de marqueurs ou l&rsquo;utilisation d&rsquo;une couleur de ligne strictement identique \u00e0 la couleur d&rsquo;arri\u00e8re-plan de l&rsquo;axe cr\u00e9e l&rsquo;illusion parfaite d&rsquo;une figure non dessin\u00e9e.<\/li>\n<\/ul>\n<p>La proc\u00e9dure m\u00e9thodique de d\u00e9bogage consiste \u00e0 isoler l&rsquo;objet figure, \u00e0 inspecter ses dimensions via <code>fig.get_size_inches()<\/code>, \u00e0 v\u00e9rifier le nombre d&rsquo;artistes rattach\u00e9s aux axes au moyen de <code>ax.get_lines()<\/code> et <code>ax.collections<\/code>, et \u00e0 enregistrer syst\u00e9matiquement l&rsquo;art\u00e9fact en bypassant toute couche interactive interm\u00e9diaire.<\/p>\n<h3>10.2 Probl\u00e8mes de permissions, chemins introuvables et erreurs d&rsquo;\u00e9criture<\/h3>\n<p>L&rsquo;ex\u00e9cution de scripts d&rsquo;analyse au sein d&rsquo;environnements virtualis\u00e9s, de conteneurs Docker ou de clusters de calcul intensif (HPC) expose fr\u00e9quemment le processus de sauvegarde \u00e0 des d\u00e9faillances fondamentales de communication avec le sous-syst\u00e8me de stockage d&rsquo;entr\u00e9es-sorties. Les deux exceptions dominantes lev\u00e9es par l&rsquo;interpr\u00e9teur sont <code>FileNotFoundError: [Errno 2] No such file or directory<\/code> et <code>PermissionError: [Errno 13] Permission denied<\/code>.<\/p>\n<p>L&rsquo;erreur <code>FileNotFoundError<\/code> survient quasi invariablement lorsque le chemin sp\u00e9cifi\u00e9 dans l&rsquo;argument <code>fname<\/code> inclut un ou plusieurs sous-r\u00e9pertoires interm\u00e9diaires qui n&rsquo;ont pas encore \u00e9t\u00e9 allou\u00e9s sur le support physique. Comme \u00e9voqu\u00e9 pr\u00e9c\u00e9demment, Matplotlib pr\u00e9suppose que l&rsquo;architecture des dossiers d&rsquo;accueil est d\u00e9j\u00e0 constitu\u00e9e. L&rsquo;adoption d&rsquo;un patron d&rsquo;architecture d\u00e9fensif utilisant la biblioth\u00e8que <code>pathlib<\/code> constitue la r\u00e9ponse structurelle \u00e0 ce risque :<\/p>\n<p><code>from pathlib import Path<\/code><\/p>\n<p><code>chemin_cible = Path(\"\/donnees\/resultats\/graphiques\/figure_1.png\")<\/code><\/p>\n<p><code>chemin_cible.parent.mkdir(parents=True, exist_ok=True)<\/code><\/p>\n<p><code>fig.savefig(chemin_cible)<\/code><\/p>\n<p>L&rsquo;exception <code>PermissionError<\/code>, quant \u00e0 elle, traduit l&rsquo;incapacit\u00e9 du processus applicatif \u00e0 acqu\u00e9rir les privil\u00e8ges d&rsquo;\u00e9criture sur le point de montage ou le fichier cibl\u00e9. Cette situation \u00e9merge couramment sous les syst\u00e8mes d&rsquo;exploitation de type UNIX lorsque le script s&rsquo;ex\u00e9cute sous l&rsquo;identit\u00e9 d&rsquo;un utilisateur d\u00e9pourvu de droits dans le r\u00e9pertoire de destination, ou sous Windows lorsqu&rsquo;un processus concurrent (comme un visualiseur PDF tiers verrouillant les fichiers ouverts en \u00e9criture) monopolise l&rsquo;acc\u00e8s exclusif au fichier cible. L&rsquo;interposition d&rsquo;un bloc de capture d&rsquo;exceptions <code>try...except IOError<\/code> permet d&rsquo;intercepter ces blocages et d&rsquo;\u00e9mettre des alertes explicites dans les journaux d&rsquo;ex\u00e9cution du syst\u00e8me.<\/p>\n<h3>10.3 Troncature des \u00e9l\u00e9ments p\u00e9riph\u00e9riques et distorsion textuelle<\/h3>\n<p>Une alt\u00e9ration r\u00e9currente affecte la nettet\u00e9 et l&rsquo;int\u00e9grit\u00e9 des \u00e9l\u00e9ments situ\u00e9s \u00e0 la marge de l&rsquo;espace de trac\u00e9, tout particuli\u00e8rement lors du travail sur des s\u00e9ries temporelles. Lorsque les graduations de l&rsquo;axe des abscisses affichent des estampilles temporelles \u00e9tendues (ex. : \u00ab 2024-03-29 14:30:00 \u00bb), les cha\u00eenes de caract\u00e8res se chevauchent ou d\u00e9bordent largement sous le bord inf\u00e9rieur de la figure, se trouvant impitoyablement d\u00e9coup\u00e9es par le cadre lors d&rsquo;une sauvegarde standard.<\/p>\n<p>Plusieurs m\u00e9canismes correctifs doivent \u00eatre mobilis\u00e9s pour r\u00e9tablir une disposition a\u00e9r\u00e9e et rigoureuse :<\/p>\n<ul>\n<li><strong>Rotation et mise en forme automatique des dates :<\/strong> L&rsquo;invocation explicite de l&rsquo;utilitaire <code>fig.autofmt_xdate()<\/code> incline automatiquement les \u00e9tiquettes chronologiques selon un angle ergonomique (habituellement 30 ou 45 degr\u00e9s) et ajuste les ancrages typographiques pour neutraliser les t\u00e9lescopages.<\/li>\n<li><strong>Gestion globale du layout g\u00e9om\u00e9trique :<\/strong> L&rsquo;appel de <code>fig.tight_layout()<\/code> avant l&rsquo;enregistrement d\u00e9clenche un recalcul dynamique des marges int\u00e9rieures, garantissant que tous les libell\u00e9s d&rsquo;axes, barres de fractions et titres b\u00e9n\u00e9ficient d&rsquo;un volume suffisant dans la composition.<\/li>\n<li><strong>Distorsions li\u00e9es aux changements d&rsquo;aspect ratio :<\/strong> Si une figure con\u00e7ue pour un format 16:9 est forc\u00e9e dans des dimensions rectangulaires incompatibles sans recalcul de la projection, les marqueurs circulaires peuvent s&rsquo;\u00e9tirer en ellipses difformes. L&rsquo;application imp\u00e9rative de <code>ax.set_aspect('equal')<\/code> sur les axes cart\u00e9siens orthonorm\u00e9s pr\u00e9serve l&rsquo;isotropie spatiale et prot\u00e8ge les structures morphologiques contre toute distorsion g\u00e9om\u00e9trique.<\/li>\n<\/ul>\n<h2>11. \u00c9tudes de cas pratiques avec impl\u00e9mentations de code d\u00e9taill\u00e9es<\/h2>\n<h3>11.1 Cas 1 : Exportation d&rsquo;un graphique de dispersion haute r\u00e9solution pour article scientifique<\/h3>\n<p>Examinons la conception int\u00e9grale d&rsquo;une visualisation complexe destin\u00e9e \u00e0 une revue acad\u00e9mique internationale \u00e0 fort facteur d&rsquo;impact. Ce cas d&rsquo;usage combine un nuage de points exp\u00e9rimentaux avec barres d&rsquo;incertitude bidirectionnelles, une r\u00e9gression polynomiale non lin\u00e9aire, un sous-ensemble d&rsquo;annotations math\u00e9matiques \u00e9l\u00e9gantes, et requiert une exportation vectorielle conforme aux exigences les plus strictes de l&rsquo;\u00e9dition typographique.<\/p>\n<p>Le code source suivant mat\u00e9rialise l&rsquo;approche orient\u00e9e objet rigoureuse, en incorporant la configuration typographique TrueType (police 42), un dimensionnement physicalis\u00e9 en millim\u00e8tres convertis en pouces, et une s\u00e9rialisation au format PDF avec m\u00e9tadonn\u00e9es descriptives exhaustives :<\/p>\n<p><code>import matplotlib as mpl<\/code><br \/>\n<code>import matplotlib.pyplot as plt<\/code><br \/>\n<code>import numpy as np<\/code><br \/>\n<code>from pathlib import Path<\/code><\/p>\n<p><code># 1. Normalisation typographique pour publication<\/code><br \/>\n<code>mpl.rcParams['pdf.fonttype'] = 42<\/code><br \/>\n<code>mpl.rcParams['font.family'] = 'serif'<\/code><br \/>\n<code>mpl.rcParams['font.size'] = 9<\/code><br \/>\n<code>mpl.rcParams['axes.labelsize'] = 10<\/code><br \/>\n<code>mpl.rcParams['legend.fontsize'] = 8<\/code><\/p>\n<p><code># 2. D\u00e9finition des donn\u00e9es exp\u00e9rimentales synth\u00e9tiques<\/code><br \/>\n<code>np.random.seed(42)<\/code><br \/>\n<code>x = np.linspace(5, 50, 25)<\/code><br \/>\n<code>y = 2.4 * np.log(x) + np.random.normal(0, 0.15, size=len(x))<\/code><br \/>\n<code>x_err = 0.5 * np.ones_like(x)<\/code><br \/>\n<code>y_err = np.random.uniform(0.1, 0.25, size=len(x))<\/code><\/p>\n<p><code># 3. Cr\u00e9ation de la figure (largeur standard colonne simple = 3.35 pouces)<\/code><br \/>\n<code>fig, ax = plt.subplots(figsize=(3.35, 2.75))<\/code><\/p>\n<p><code># 4. Trac\u00e9 des primitives g\u00e9om\u00e9triques<\/code><br \/>\n<code>ax.errorbar(x, y, xerr=x_err, yerr=y_err, fmt='o', color='#1b4965',<\/code><br \/>\n<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ecolor='#62b6cb', elinewidth=1.2, capsize=2, label='Mesures empiriques')<\/code><br \/>\n<code>poly_coefs = np.polyfit(np.log(x), y, 1)<\/code><br \/>\n<code>x_fit = np.linspace(4, 52, 100)<\/code><br \/>\n<code>y_fit = poly_coefs[0] * np.log(x_fit) + poly_coefs[1]<\/code><br \/>\n<code>ax.plot(x_fit, y_fit, color='#d90429', linestyle='--', linewidth=1.5, label='Mod\u00e8le cin\u00e9tique')<\/code><\/p>\n<p><code># 5. Habillage informatif et ergonomie cart\u00e9sienne<\/code><br \/>\n<code>ax.set_xlabel('Concentration volumique (<span class=\"arabpsy-math-inline\" data-latex=\"mol \\cdot L^{-1}\">$mol \\cdot L^{-1}$<\/span>)')<\/code><br \/>\n<code>ax.set_ylabel('Vitesse de r\u00e9action (<span class=\"arabpsy-math-inline\" data-latex=\"AU\">$AU$<\/span>)')<\/code><br \/>\n<code>ax.legend(loc='lower right', frameon=True, framealpha=0.9)<\/code><br \/>\n<code>ax.grid(True, linestyle=':', alpha=0.6)<\/code><\/p>\n<p><code># 6. S\u00e9rialisation contr\u00f4l\u00e9e au format PDF avec m\u00e9tadonn\u00e9es<\/code><br \/>\n<code>repertoire = Path(\".\/publications\/figures\")<\/code><br \/>\n<code>repertoire.mkdir(parents=True, exist_ok=True)<\/code><br \/>\n<code>fig.savefig(repertoire \/ 'cinetique_haute_precision.pdf',<\/code><br \/>\n<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bbox_inches='tight', pad_inches=0.03,<\/code><br \/>\n<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;metadata={'Author': '\u00c9quipe Analyse', 'Title': 'Mod\u00e8le cin\u00e9tique'})<\/code><br \/>\n<code>plt.close(fig)<\/code><\/p>\n<p>Ce script illustre la prise en compte int\u00e9grale des contraintes : le ratio dimensionnel garantit une lisibilit\u00e9 irr\u00e9prochable au sein d&rsquo;une mise en page en colonne, les textes sont inclus sous forme de glyphes \u00e9ditables, et l&rsquo;espace disque est optimis\u00e9 gr\u00e2ce au param\u00e8tre <code>bbox_inches='tight'<\/code> ajust\u00e9 avec un micro-rembourrage protecteur.<\/p>\n<h3>11.2 Cas 2 : G\u00e9n\u00e9ration automatis\u00e9e de figures comparatives \u00e0 disposition resserr\u00e9e<\/h3>\n<p>L&rsquo;analyse comparative requiert couramment la disposition d&rsquo;un ensemble de sous-graphiques multi-panneaux (<em>small multiples<\/em>) au sein d&rsquo;une m\u00eame figure unifi\u00e9e, permettant d&rsquo;\u00e9valuer les variations d&rsquo;un ph\u00e9nom\u00e8ne selon plusieurs dimensions exp\u00e9rimentales distinctes. L&rsquo;objectif technique consiste \u00e0 juxtaposer ces panneaux en \u00e9liminant les redondances graphiques (telles que les r\u00e9p\u00e9titions inutiles des noms d&rsquo;axes) tout en garantissant un export matriciel parfaitement net pour une int\u00e9gration directe sur un tableau de bord \u00e9lectronique.<\/p>\n<p>La mise en \u0153uvre suivante d\u00e9ploie une grille de deux par deux sous-panneaux synchronis\u00e9s, utilise l&rsquo;algorithme <code>constrained_layout<\/code> de Matplotlib (plus robuste que <code>tight_layout<\/code> dans les grilles complexes), et applique un enregistrement matriciel PNG ultra-haute d\u00e9finition avec une gestion rigoureuse de la couleur d&rsquo;enveloppe :<\/p>\n<p><code>import matplotlib.pyplot as plt<\/code><br \/>\n<code>import numpy as np<\/code><br \/>\n<code>from pathlib import Path<\/code><\/p>\n<p><code># Configuration des sous-panneaux avec layout contraint natif<\/code><br \/>\n<code>fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(8, 6), sharex=True, sharey=True,<\/code><br \/>\n<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;layout='constrained')<\/code><\/p>\n<p><code>abscisses = np.linspace(0, 10, 200)<\/code><br \/>\n<code>facteurs = [0.5, 1.0, 1.5, 2.0]<\/code><br \/>\n<code>palettes = ['#264653', '#2a9d8f', '#e76f51', '#f4a261']<\/code><\/p>\n<p><code>for idx, (ax, facteur, couleur) in enumerate(zip(axes.flat, facteurs, palettes)):<\/code><br \/>\n<code>&nbsp;&nbsp;&nbsp;&nbsp;ordonnees = np.sin(abscisses * facteur) * np.exp(-abscisses * 0.1)<\/code><br \/>\n<code>&nbsp;&nbsp;&nbsp;&nbsp;ax.plot(abscisses, ordonnees, color=couleur, linewidth=2, label=f\"<span class=\"arabpsy-math-inline\" data-latex=\"\\omega = {facteur}\">$\\omega = {facteur}$<\/span>\")<\/code><br \/>\n<code>&nbsp;&nbsp;&nbsp;&nbsp;ax.set_title(f\"\u00c9chantillon {chr(65 + idx)}\", fontsize=11, fontweight='bold')<\/code><br \/>\n<code>&nbsp;&nbsp;&nbsp;&nbsp;ax.grid(True, linestyle='--', alpha=0.5)<\/code><br \/>\n<code>&nbsp;&nbsp;&nbsp;&nbsp;ax.legend(loc='upper right')<\/code><\/p>\n<p><code># \u00c9tiquetage structurel p\u00e9riph\u00e9rique mutualis\u00e9<\/code><br \/>\n<code>fig.supxlabel('Temps d'oscillation (<span class=\"arabpsy-math-inline\" data-latex=\"s\">$s$<\/span>)', fontsize=12)<\/code><br \/>\n<code>fig.supylabel('Amplitude normalis\u00e9e', fontsize=12)<\/code><\/p>\n<p><code># Exportation rasteris\u00e9e sans pertes \u00e0 300 DPI pour le web technique<\/code><br \/>\n<code>chemin_dossier = Path(\".\/rapports_web\/img\")<\/code><br \/>\n<code>chemin_dossier.mkdir(parents=True, exist_ok=True)<\/code><br \/>\n<code>fig.savefig(chemin_dossier \/ 'comparaison_grille_dense.png',<\/code><br \/>\n<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dpi=300, facecolor='#fafafa', edgecolor='none')<\/code><br \/>\n<code>plt.close(fig)<\/code><\/p>\n<p>Gr\u00e2ce \u00e0 la commande <code>sharex=True<\/code> et <code>sharey=True<\/code> combin\u00e9e aux titres globaux <code>supxlabel<\/code> et <code>supylabel<\/code>, l&rsquo;espace d&rsquo;affichage est exploit\u00e9 au maximum de son potentiel g\u00e9om\u00e9trique. Le r\u00e9sultat s\u00e9rialis\u00e9 en PNG pr\u00e9sente un \u00e9quilibre visuel parfait, totalement exempt de tout encombrement typographique marginal.<\/p>\n<h3>11.3 Cas 3 : Production d&rsquo;un document multipage au format PDF<\/h3>\n<p>Une exigence technique majeure rencontr\u00e9e dans les d\u00e9partements de recherche appliqu\u00e9e r\u00e9side dans la compilation d&rsquo;une s\u00e9rie analytique exhaustive au sein d&rsquo;un document unique et consolid\u00e9, plut\u00f4t que d&rsquo;\u00e9parpiller des centaines de fichiers graphiques individuels sur le syst\u00e8me de fichiers. Qu&rsquo;il s&rsquo;agisse de compiler les profils de cent patients d&rsquo;une cohorte m\u00e9dicale ou d&rsquo;archiver les performances de cinquante r\u00e9acteurs industriels, l&rsquo;exportation multipage s&rsquo;impose comme une n\u00e9cessit\u00e9.<\/p>\n<p>Matplotlib r\u00e9pond \u00e0 cette probl\u00e9matique par l&rsquo;interm\u00e9diaire de sa classe <code>PdfPages<\/code>, implant\u00e9e directement au sein du backend sp\u00e9cialis\u00e9 <code>matplotlib.backends.backend_pdf<\/code>. Cet outil permet d&rsquo;ouvrir un flux d&rsquo;\u00e9criture PDF persistant, de s\u00e9rialiser s\u00e9quentiellement une multitude de toiles <code>Figure<\/code> au fil de leur instanciation, puis de sceller herm\u00e9tiquement le fichier conteneur \u00e0 l&rsquo;issue de l&rsquo;ex\u00e9cution, comme l&rsquo;illustre l&rsquo;impl\u00e9mentation suivante :<\/p>\n<p><code>import matplotlib.pyplot as plt<\/code><br \/>\n<code>from matplotlib.backends.backend_pdf import PdfPages<\/code><br \/>\n<code>import numpy as np<\/code><br \/>\n<code>from pathlib import Path<\/code><\/p>\n<p><code>nom_archive = Path(\".\/dossier_archives\/rapport_complet_experiences.pdf\")<\/code><br \/>\n<code>nom_archive.parent.mkdir(parents=True, exist_ok=True)<\/code><\/p>\n<p><code># Instanciation du gestionnaire de contexte multipage<\/code><br \/>\n<code>with PdfPages(nom_archive) as flux_pdf:<\/code><br \/>\n<code>&nbsp;&nbsp;&nbsp;&nbsp;# 1. G\u00e9n\u00e9ration d'une page de couverture synth\u00e9tique<\/code><br \/>\n<code>&nbsp;&nbsp;&nbsp;&nbsp;fig_couv, ax_couv = plt.subplots(figsize=(8.27, 11.69)) # Format physique A4<\/code><br \/>\n<code>&nbsp;&nbsp;&nbsp;&nbsp;ax_couv.axis('off')<\/code><br \/>\n<code>&nbsp;&nbsp;&nbsp;&nbsp;ax_couv.text(0.5, 0.6, \"Rapport d'Essais Physiques\", fontsize=24,<\/code><br \/>\n<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fontweight='bold', ha='center')<\/code><br \/>\n<code>&nbsp;&nbsp;&nbsp;&nbsp;ax_couv.text(0.5, 0.5, \"Campagne Exp\u00e9rimentale 2024-B\", fontsize=14,<\/code><br \/>\n<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color='gray', ha='center')<\/code><br \/>\n<code>&nbsp;&nbsp;&nbsp;&nbsp;flux_pdf.savefig(fig_couv)<\/code><br \/>\n<code>&nbsp;&nbsp;&nbsp;&nbsp;plt.close(fig_couv)<\/code><\/p>\n<p><code>&nbsp;&nbsp;&nbsp;&nbsp;# 2. Boucle it\u00e9rative de g\u00e9n\u00e9ration des planches de donn\u00e9es<\/code><br \/>\n<code>&nbsp;&nbsp;&nbsp;&nbsp;for iteration in range(1, 4):<\/code><br \/>\n<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fig, ax = plt.subplots(figsize=(8.27, 5.84)) # Format A5 paysage<\/code><br \/>\n<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vecteur_x = np.linspace(0, 100, 500)<\/code><br \/>\n<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bruit = np.random.normal(0, 1, 500)<\/code><br \/>\n<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signal = np.sin(vecteur_x \/ (iteration * 2)) + bruit * 0.2<\/code><br \/>\n<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ax.plot(vecteur_x, signal, color='navy', label=f'Signal phase {iteration}')<\/code><br \/>\n<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ax.set_title(f\"S\u00e9rie Exp\u00e9rimentale N\u00b0 {iteration}\")<\/code><br \/>\n<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ax.set_xlabel(\"Temps (s)\")<\/code><br \/>\n<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ax.set_ylabel(\"Tension (mV)\")<\/code><br \/>\n<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ax.legend()<\/code><br \/>\n<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ax.grid(True)<\/code><\/p>\n<p><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Enregistrement de la planche au sein du flux consolid\u00e9<\/code><br \/>\n<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flux_pdf.savefig(fig, bbox_inches='tight')<\/code><br \/>\n<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;plt.close(fig) # Lib\u00e9ration stricte de la m\u00e9moire vive<\/code><\/p>\n<p>L&#8217;emploi du gestionnaire de contexte (instruction <code>with<\/code>) garantit que, m\u00eame en cas de survenue d&rsquo;une exception en milieu d&rsquo;ex\u00e9cution, le descripteur de fichier est convenablement finalis\u00e9 et les index internes du document PDF sont scell\u00e9s, pr\u00e9servant ainsi l&rsquo;int\u00e9grit\u00e9 de l&rsquo;archive produite sans risque de corruption binaire.<\/p>\n<h2>12. Synth\u00e8se m\u00e9thodologique et bonnes pratiques pour l&rsquo;archivage graphique<\/h2>\n<h3>12.1 Protocole syst\u00e9matique de validation avant exportation d\u00e9finitive<\/h3>\n<p>L&rsquo;exportation d&rsquo;une figure sur support p\u00e9renne ne constitue pas l&rsquo;\u00e9pilogue passif d&rsquo;un script, mais une op\u00e9ration soumise \u00e0 un contr\u00f4le qualit\u00e9 syst\u00e9matique. Avant d&rsquo;int\u00e9grer une visualisation au sein d&rsquo;un d\u00e9p\u00f4t d&rsquo;archives p\u00e9renne ou d&rsquo;un manuscrit soumis pour publication, il est indispensable d&rsquo;appliquer un protocole d&rsquo;inspection m\u00e9thodique articul\u00e9 autour d&rsquo;une grille de contr\u00f4le rigoureuse :<\/p>\n<ul>\n<li><strong>V\u00e9rification dimensionnelle et lisibilit\u00e9 :<\/strong> La figure a-t-elle \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e aux dimensions exactes requises par son support final ? Si l&rsquo;image est observ\u00e9e \u00e0 une \u00e9chelle de reproduction de cent pour cent sur un document imprim\u00e9, les tiques d&rsquo;axes et la l\u00e9gende demeurent-elles parfaitement lisibles sans effort visuel ?<\/li>\n<li><strong>Compl\u00e9tude s\u00e9mantique :<\/strong> Toutes les grandeurs physiques affich\u00e9es sont-elles assorties de leurs unit\u00e9s respectives du Syst\u00e8me International ? Les barres d&rsquo;erreur indiquent-elles clairement dans la l\u00e9gende ou la note d&rsquo;accompagnement si elles incarnent un \u00e9cart-type, une erreur standard ou un intervalle de confiance \u00e0 95 % ?<\/li>\n<li><strong>Conformit\u00e9 chromatique et daltonisme :<\/strong> La palette de couleurs retenue est-elle discernable par des individus atteints de d\u00e9ficiences de la vision des couleurs (deut\u00e9ranopie, protanopie) ? L&rsquo;utilisation syst\u00e9matique des palettes perceptuellement uniformes int\u00e9gr\u00e9es \u00e0 Matplotlib (telles que <em>viridis<\/em>, <em>plasma<\/em>, <em>cividis<\/em> ou <em>inferno<\/em>) doit \u00eatre pr\u00e9f\u00e9r\u00e9e aux d\u00e9grad\u00e9s arc-en-ciel d\u00e9suets comme <em>jet<\/em>.<\/li>\n<li><strong>V\u00e9rification des canaux de transparence :<\/strong> Si <code>transparent=True<\/code> a \u00e9t\u00e9 utilis\u00e9, le trac\u00e9 conserve-t-il un contraste suffisant lorsqu&rsquo;il est projet\u00e9 successivement sur un fond immacul\u00e9 et sur un fond sombre ?<\/li>\n<\/ul>\n<h3>12.2 Reproductibilit\u00e9 computationnelle et conservation conjointe code-figure<\/h3>\n<p>Dans l&rsquo;\u00e9cosyst\u00e8me contemporain de la recherche reproductible, un fichier image isol\u00e9 poss\u00e8de une valeur scientifique \u00e9ph\u00e9m\u00e8re s&rsquo;il est dissoci\u00e9 de son lignage computationnel. Pour garantir qu&rsquo;un r\u00e9sultat graphique puisse \u00eatre r\u00e9examin\u00e9, audit\u00e9 ou mis \u00e0 jour plusieurs ann\u00e9es apr\u00e8s sa production originale, il est capital de pr\u00e9server une association stricte et infalsifiable entre le code source, le jeu de donn\u00e9es d&rsquo;origine et l&rsquo;art\u00e9fact graphique final.<\/p>\n<p>Plusieurs strat\u00e9gies de conservation conjointe doivent \u00eatre rigoureusement appliqu\u00e9es :<\/p>\n<ul>\n<li><strong>Fixation d\u00e9terministe des g\u00e9n\u00e9rateurs pseudo-al\u00e9atoires :<\/strong> Tout script impliquant des simulations stochastiques, des \u00e9chantillonnages Monte-Carlo ou des initialisations d&rsquo;algorithmes d&rsquo;apprentissage automatique doit fixer explicitement sa graine al\u00e9atoire (par exemple via <code>numpy.random.seed()<\/code> ou <code>random.seed()<\/code>). Deux ex\u00e9cutions successives du script doivent produire des trac\u00e9s strictement superposables au pixel pr\u00e8s.<\/li>\n<li><strong>Int\u00e9gration d&#8217;empreintes num\u00e9riques (Checksums et Git) :<\/strong> Lier syst\u00e9matiquement le commit Git actif de l&rsquo;analyse dans les m\u00e9tadonn\u00e9es PDF de la figure permet de remonter instantan\u00e9ment \u00e0 l&rsquo;\u00e9tat exact de la base de code qui a forg\u00e9 le trac\u00e9.<\/li>\n<li><strong>Verrouillage de l&rsquo;environnement logiciel :<\/strong> L&rsquo;archivage d&rsquo;un fichier d\u00e9crivant rigoureusement les versions des biblioth\u00e8ques mobilis\u00e9es (via un environnement <code>conda<\/code> ou un fichier <code>requirements.txt<\/code> scellant les versions exactes de Python et de Matplotlib) pr\u00e9munit l&rsquo;\u00e9quipe de recherche contre les alt\u00e9rations esth\u00e9tiques mineures cons\u00e9cutives aux mont\u00e9es de version logicielles.<\/li>\n<\/ul>\n<h3>12.3 Tableau r\u00e9capitulatif des param\u00e8tres fondamentaux de savefig<\/h3>\n<p>Pour servir d&rsquo;aide-m\u00e9moire op\u00e9rationnel lors de la conception quotidienne de vos scripts de traitement et d&rsquo;exportation graphique, le tableau synoptique ci-dessous synth\u00e9tise les param\u00e8tres cardinaux de la m\u00e9thode <code>savefig<\/code>, leurs domaines de valeurs admissibles ainsi que leurs recommandations m\u00e9thodologiques associ\u00e9es :<\/p>\n<table border=\"1\" cellpadding=\"8\" cellspacing=\"0\" style=\"border-collapse: collapse;width: 100%;margin-top: 15px;margin-bottom: 25px\">\n<thead>\n<tr style=\"background-color: #f2f2f2;text-align: left\">\n<th>Param\u00e8tre<\/th>\n<th>Type et Valeurs<\/th>\n<th>Comportement et Recommandations<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>fname<\/strong><\/td>\n<td><code>str<\/code>, <code>Path<\/code>, ou descripteur de fichier binaire<\/td>\n<td>Sp\u00e9cifie la destination du flux. L&rsquo;extension finale (.pdf, .png, .svg) d\u00e9clenche la d\u00e9tection automatique du format et du backend appropri\u00e9.<\/td>\n<\/tr>\n<tr>\n<td><strong>dpi<\/strong><\/td>\n<td><code>float<\/code> ou <code>int<\/code> (ex. : 150, 300, 600)<\/td>\n<td>Fixe la r\u00e9solution en points par pouce pour les sorties matricielles. Utiliser 300 DPI pour l&rsquo;impression de recherche, 600 pour le line-art, 100-150 pour l&rsquo;\u00e9cran.<\/td>\n<\/tr>\n<tr>\n<td><strong>format<\/strong><\/td>\n<td><code>str<\/code> (ex. : <code>'png'<\/code>, <code>'pdf'<\/code>, <code>'svg'<\/code>)<\/td>\n<td>Force le codec d&rsquo;exportation ind\u00e9pendamment de la pr\u00e9sence ou de l&rsquo;absence d&rsquo;extension dans la cha\u00eene <code>fname<\/code>.<\/td>\n<\/tr>\n<tr>\n<td><strong>bbox_inches<\/strong><\/td>\n<td><code>'tight'<\/code> ou instance de <code>Bbox<\/code><\/td>\n<td>Calcule la bo\u00eete englobante exacte des artistes graphiques. \u00c9limine les bordures blanches superflues ; imp\u00e9ratif pour int\u00e9grer les l\u00e9gendes externes.<\/td>\n<\/tr>\n<tr>\n<td><strong>pad_inches<\/strong><\/td>\n<td><code>float<\/code> (d\u00e9faut : 0.1)<\/td>\n<td>R\u00e9git l&rsquo;\u00e9paisseur de la marge r\u00e9siduelle maintenue autour de la figure lorsque <code>bbox_inches='tight'<\/code> est activ\u00e9. Pr\u00e9vient les coupures marginales.<\/td>\n<\/tr>\n<tr>\n<td><strong>transparent<\/strong><\/td>\n<td><code>bool<\/code> (True \/ False)<\/td>\n<td>Bascule les canaux alpha de la figure et des axes \u00e0 z\u00e9ro. Id\u00e9al pour les pr\u00e9sentations sur fond sombre, requiert un format supportant l&rsquo;alpha (PNG, PDF, SVG).<\/td>\n<\/tr>\n<tr>\n<td><strong>facecolor<\/strong><\/td>\n<td>Code couleur (nom, hexad\u00e9cimal, RVB)<\/td>\n<td>Surcharge ponctuellement la couleur de remplissage de l&rsquo;arri\u00e8re-plan de la figure lors de l&rsquo;\u00e9criture sans alt\u00e9rer la figure interactive en m\u00e9moire.<\/td>\n<\/tr>\n<tr>\n<td><strong>metadata<\/strong><\/td>\n<td><code>dict<\/code> (paires cl\u00e9-valeur textuelles)<\/td>\n<td>Injecte des descripteurs normalis\u00e9s (titre, auteur, licence) au sein des en-t\u00eates binaires des formats compatibles (PDF, PNG). Favorise les principes FAIR.<\/td>\n<\/tr>\n<tr>\n<td><strong>backend<\/strong><\/td>\n<td><code>str<\/code> (ex. : <code>'Agg'<\/code>, <code>'PDF'<\/code>, <code>'SVG'<\/code>)<\/td>\n<td>Permet de sp\u00e9cifier manuellement le moteur de rendu devant s\u00e9rialiser la sortie, outrepassant la configuration g\u00e9n\u00e9rale de la session courante.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>En mobilisant avec discernement ces divers param\u00e8tres et en adoptant syst\u00e9matiquement l&rsquo;architecture orient\u00e9e objet, vous garantissez \u00e0 vos productions scientifiques et techniques une long\u00e9vit\u00e9, une \u00e9l\u00e9gance formelle et une pr\u00e9cision math\u00e9matique en accord avec les standards industriels et acad\u00e9miques les plus exigeants.<\/p>\n<h2>R\u00e9f\u00e9rences<\/h2>\n<ul>\n<li>Hunter, J. D. (2007). Matplotlib: A 2D graphics environment. <em>Computing in Science &amp; Engineering<\/em>, 9(3), 90\u201395. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1109\/MCSE.2007.55\">https:\/\/doi.org\/10.1109\/MCSE.2007.55<\/a><\/li>\n<li>Matplotlib Development Team. (2024). <em>matplotlib.pyplot.savefig documentation<\/em>. Matplotlib documentation. <a rel=\"noopener noreferrer\" href=\"https:\/\/matplotlib.org\/stable\/api\/_as_gen\/matplotlib.pyplot.savefig.html\">https:\/\/matplotlib.org\/stable\/api\/_as_gen\/matplotlib.pyplot.savefig.html<\/a><\/li>\n<li>Matplotlib Development Team. (2024). <em>Configuring the font family and embedding fonts in PDF\/PS<\/em>. Matplotlib User Guide. <a rel=\"noopener noreferrer\" href=\"https:\/\/matplotlib.org\/stable\/users\/explain\/text\/fonts.html\">https:\/\/matplotlib.org\/stable\/users\/explain\/text\/fonts.html<\/a><\/li>\n<li>Rougier, N. P. (2021). <em>Scientific Visualization: Python + Matplotlib<\/em>. Zenodo. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.5281\/zenodo.5194481\">https:\/\/doi.org\/10.5281\/zenodo.5194481<\/a><\/li>\n<li>Tufte, E. R. (2001). <em>The Visual Display of Quantitative Information<\/em> (2nd ed.). Graphics Press.<\/li>\n<li>Waskom, M. L. (2021). Seaborn: statistical data visualization. <em>Journal of Open Source Software<\/em>, 6(60), 3021. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.21105\/joss.03021\">https:\/\/doi.org\/10.21105\/joss.03021<\/a><\/li>\n<li>Wilke, C. O. (2019). <em>Fundamentals of Data Visualization: A Primer on Making Informative and Compelling Figures<\/em>. O&rsquo;Reilly Media.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Guide acad\u00e9mique complet pour enregistrer une figure Matplotlib dans un fichier : syntaxe savefig, formats vectoriels ou matriciels, r\u00e9solution DPI et exemples.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","template":"","categories":[5518,304],"tags":[2482,3150,3106,2468,2041],"class_list":["post-3501","psych_stat","type-psych_stat","status-publish","hentry","category-informatique-scientifique","category-methodologie-de-recherche","tag-data-science","tag-matplotlib","tag-publication-scientifique","tag-python","tag-visualisation-de-donnees"],"_links":{"self":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/3501","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat"}],"about":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/types\/psych_stat"}],"author":[{"embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3501"}],"version-history":[{"count":1,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/3501\/revisions"}],"predecessor-version":[{"id":16500,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/3501\/revisions\/16500"}],"wp:attachment":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3501"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3501"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3501"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}