2010-03-29 12 views
18

La siguiente secuencia de comandos:matemáticas Sans-serif con el látex en matplotlib

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') 

es un intento de utilizar un tipo de letra sans-serif en matplotlib con el látex. El problema es que la fuente matemática sigue siendo una fuente serif (como lo indican los números del eje, y como lo demuestran las etiquetas en el centro). ¿Hay alguna manera de establecer que la fuente matemática también sea sans-serif?

+3

'r "$ \ mathsf {451^\ circ} $" '? – kennytm

+0

Consulte http://stackoverflow.com/questions/17958485/matplotlib-not-using-latex-font-while-tex-usetex-true/17967324?noredirect=1#17967324 – Dirklinux

+0

¿funciona mi respuesta a continuación? –

Respuesta

19

Siempre tengo text.usetex = True en mi archivo matplotlibrc. Además de eso, yo uso esto también:

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! 
] 

Espero que ayude.

+0

Esto es exactamente lo que necesitaba para obtener la fuente Helvetica (palabra clave :) trabajando con matplotlib/pylab en mis trazados. ¡Y he intentado bastantes cosas! Esperemos que Google lo indexe en caso de que otros intenten hacer lo mismo. – SullX

+1

Perfecto. Para obtener más opciones de fuentes, consulte http://www.tug.dk/FontCatalogue/sansseriffonts.html y reemplace el '\ usepackage {helvet}' con su favorito :) – np8

12

La forma más sencilla es usar TeX de matplotlib interno, por ejemplo:

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

Si se utiliza un látex externa, que puede utilizar, por ejemplo, CM fuentes luminosas:

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

Nota, que la fuente CM Bright no es escalable, ¡y no podrás guardar PDF/PS! Lo mismo con otras opciones con LaTeX externo que he encontrado hasta ahora.

+0

¿Cómo puedo eliminar la forma de cursiva utilizando el TeX interno de matplotlib? – Ger

1

Esto le permitirá utilizar la fuente de ordenador moderno Sans si, como yo, lo prefieren a 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' 
+0

Esto funcionó para mí, y había estado luchando para encontrar lo que las fuentes modernas de la computadora se llamaban en el back-end. No pude encontrar una lista en ninguna parte. – user3087409