23 votes

Mathématiques sans empattement avec latex dans matplotlib

Le script suivant :

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as mpl

mpl.rc('font', family='sans-serif')
mpl.rc('text', usetex=True)

fig = mpl.figure()
ax = fig.add_subplot(1,1,1)
ax.text(0.2,0.5,r"Math font: $451^\circ$")
ax.text(0.2,0.7,r"Normal font (except for degree symbol): 451$^\circ$")

fig.savefig('test.png')

est une tentative d'utiliser une police sans-serif dans matplotlib avec LaTeX. Le problème est que la police mathématique est toujours une police avec empattement (comme indiqué par les numéros d'axe, et comme démontré par les étiquettes au centre). Existe-t-il un moyen de définir la police mathématique pour qu'elle soit également sans empattement ?

29voto

Paul H Points 5612

J'ai toujours text.usetex = True dans mon fichier matplotlibrc. En plus de cela, j'utilise également ceci :

mpl.rcParams['text.latex.preamble'] = [
       r'\usepackage{siunitx}',   # i need upright \micro symbols, but you need...
       r'\sisetup{detect-all}',   # ...this to force siunitx to actually use your fonts
       r'\usepackage{helvet}',    # set the normal font here
       r'\usepackage{sansmath}',  # load up the sansmath so that math -> helvet
       r'\sansmath'               # <- tricky! -- gotta actually tell tex to use!
]  

J'espère que cela vous aidera.

14voto

Vyacheslav Points 31

Le moyen le plus simple est d'utiliser le TeX interne de matplotlib, par exemple :

import pylab as plt
params = {'text.usetex': False, 'mathtext.fontset': 'stixsans'}
plt.rcParams.update(params)

Si vous utilisez un LaTeX externe, vous pouvez utiliser, par exemple, les polices CM Bright :

params = {'text.usetex': True, 
          'text.latex.preamble': [r'\usepackage{cmbright}', r'\usepackage{amsmath}']}
plt.rcParams.update(params)

Notez que la police CM Bright n'est pas extensible, et que vous ne pourrez pas sauvegarder les PDF/PS ! Idem pour les autres options avec LaTeX externe que j'ai trouvées jusqu'à présent.

2voto

nedim Points 857

Cela vous permettra d'utiliser la police Computer Modern Sans si, comme moi, vous la préférez à Helvetica :

mpl.rcParams['text.usetex'] = True 
mpl.rcParams['text.latex.preamble'] = [r'\usepackage[cm]{sfmath}']
mpl.rcParams['font.family'] = 'sans-serif'
mpl.rcParams['font.sans-serif'] = 'cm'

0voto

Nico Points 893

Vous pouvez consulter https://github.com/nschloe/matplotlib2tikz . De plus, matplotlib a récemment été équipé d'un backend TikZ/PGF, cf. https://github.com/matplotlib/matplotlib/issues/319 .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X