2010-03-29 10 views
18

Das folgende Skript:Sans-serif Mathe mit Latex in 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') 

ist ein Versuch, eine serifenlose Schrift in matplotlib mit LaTeX zu verwenden. Das Problem ist, dass die mathematische Schriftart immer noch eine Serifenschrift ist (wie durch die Achsennummern angezeigt wird, und wie durch die Beschriftungen in der Mitte gezeigt wird). Gibt es eine Möglichkeit, die mathematische Schriftart auch serifenlos zu setzen?

+3

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

+0

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

+0

funktioniert meine Antwort unterhalb der Arbeit? –

Antwort

19

Ich habe immer text.usetex = True in meiner Matplotlibrc-Datei. Zusätzlich verwende ich das auch:

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

Hoffe, dass hilft.

+0

Dies ist genau das, was ich brauchte, um das (Schlüsselwort :) Helvetica font mit matplotlib/pylab in meinen Plots zu verwenden. Und ich habe einiges ausprobiert! Hoffentlich indexiert Google das, wenn andere versuchen, dasselbe zu tun. – SullX

+1

Perfekt. Weitere Schriftarten finden Sie unter http://www.tug.dk/FontCatalogue/sansseriffonts.html und ersetzen Sie das '\ usepackage {helvet}' durch Ihren Favoriten :) – np8

12

Der einfachste Weg ist matplotlib internen TeX zu verwenden, zB:

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

Wenn Sie eine externe LaTeX verwenden, können Sie verwenden, zB CM Helle Fonts:

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

Hinweis, dass Die Schriftart CM Bright ist nicht skalierbar und Sie können PDF/PS nicht speichern! Gleiches mit anderen Optionen mit externen LaTeX habe ich bisher gefunden.

+0

Wie kann ich kursive Form mit dem internen TeX von Matplotlib entfernen? – Ger

1

Dies ermöglicht es Ihnen, den Computer Modern Sans Schriftart zu verwenden, wenn Sie, wie ich, es über Helvetica bevorzugen:

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

Das funktionierte für mich, und ich hatte Mühe, zu finden, was die modernen Computerschriftarten im Backend genannt wurden. Ich konnte nirgendwo eine Liste finden. – user3087409