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:
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}
Comme le montre la comparaison de deux polices - les différences n'existent pas (1 - MatPlotlib, 2 - pdfLaTeX)
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.