web-dev-qa-db-fra.com

Comment obtenir la même police (-style, -size etc.) dans la sortie matplotlib que dans la sortie latex?

J'en ai un .tex- document dans lequel un graphe est créé par le python module matplotlib. Ce que je veux, c'est que le graphe se fond dans le document aussi bien que possible. Donc je veulent que les caractères utilisés dans le graphique ressemblent exactement aux autres mêmes caractères dans le reste du document.

Mon premier essai ressemble à ceci (le fichier matplotlibrc-):

text.usetex   : True
text.latex.preamble: \usepackage{lmodern} #Used in .tex-document
font.size    : 11.0 #Same as in .tex-document
backend: PDF

Pour la compilation du .tex dans lequel le PDF sortie de matplotlib est inclus, pdflatex est utilisé.

Maintenant, la sortie n'est pas mauvaise, mais elle est quelque peu différente, les caractères du graphique semblent plus faibles en largeur de trait.

Quelle est la meilleure approche pour cela?

EDIT: Exemple minimum: Entrée LaTeX:

\documentclass[11pt]{scrartcl}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage{graphicx}

\begin{document}

\begin{figure}
\includegraphics{./graph}
\caption{Excitation-Energy}
\label{fig:graph}
\end{figure}

\end{document}

Script Python:

import matplotlib.pyplot as plt
import numpy as np

plt.plot([1,2,3,4])
plt.xlabel("Excitation-Energy")
plt.ylabel("Intensität")
plt.savefig("graph.pdf")

Sortie PDF:

enter image description here

35
John H. K.

La différence dans les polices peut être causée par un paramètre incorrect définissant les images avec matplotlib ou par une mauvaise intégration dans le document final. Je pense que problème dans text.latex.preamble:\usepackage {lmodern}. Cette chose fonctionne très mal et même les développeurs ne garantissent pas sa faisabilité, comment vous pouvez le trouver ici . Dans mon cas, cela n'a pas du tout fonctionné.

Différences minimales de police associées à la famille de polices. Pour résoudre ce problème, vous avez besoin de: 'font.family': 'lmodern' in rc . D'autres options et paramètres plus détaillés peuvent être trouvés ici.

Pour supprimer ce problème, j'ai utilisé une méthode légèrement différente - directe. plt.rcParams ['text.latex.preamble'] = [r "\ usepackage {lmodern}"]. Ce n'est pas étrange, mais cela a fonctionné. De plus amples informations peuvent être trouvées sur le lien ci-dessus.


Pour éviter ces effets, consultez ce code:

import matplotlib.pyplot as plt

#Direct input 
plt.rcParams['text.latex.preamble']=[r"\usepackage{lmodern}"]
#Options
params = {'text.usetex' : True,
          'font.size' : 11,
          'font.family' : 'lmodern',
          'text.latex.unicode': True,
          }
plt.rcParams.update(params) 

fig = plt.figure()

#You must select the correct size of the plot in advance
fig.set_size_inches(3.54,3.54) 

plt.plot([1,2,3,4])
plt.xlabel("Excitation-Energy")
plt.ylabel("Intensität")
plt.savefig("graph.pdf", 
            #This is simple recomendation for publication plots
            dpi=1000, 
            # Plot will be occupy a maximum of available space
            bbox_inches='tight', 
            )

Et enfin passer au latex:

\documentclass[11pt]{scrartcl}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage{graphicx}

\begin{document}

\begin{figure}
    \begin{center}
        \includegraphics{./graph}
        \caption{Excitation-Energy}
        \label{fig:graph}
    \end{center}
\end{figure}

\end{document}

Résultats

Zoom of pdf document

Comme le montre la comparaison de deux polices - les différences n'existent pas (1 - MatPlotlib, 2 - pdfLaTeX) Comparison of fonts

23
Elenium

Alternativement, vous pouvez utiliser Matplotlib's PGF backend . Il exporte votre graphique en utilisant le package LaTeX PGF, puis il utilisera les mêmes polices que votre document utilise, car il ne s'agit que d'une collection de commandes LaTeX. Vous ajoutez ensuite dans l'environnement de la figure en utilisant la commande d'entrée, au lieu d'inclure des graphiques:

\begin{figure}
  \centering
  \input{your_figure.pgf}
  \caption{Your caption}
\end{figure}

Si vous avez besoin d'ajuster les tailles, le package Adjustbox peut vous aider.

4
WDiniz