2010-03-29 35 views
18

Các kịch bản sau đây:Sans-serif toán với latex trong 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') 

là một nỗ lực để sử dụng một phông chữ sans-serif trong matplotlib với LaTeX. Vấn đề là phông chữ toán học vẫn là một phông chữ serif (như được chỉ ra bởi các số trục, và như được minh họa bởi các nhãn ở giữa). Có cách nào để thiết lập phông chữ toán học cũng là sans-serif không?

+3

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

+0

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

+0

câu trả lời của tôi bên dưới có hiệu quả không? –

Trả lời

19

Tôi luôn có text.usetex = True trong tệp matplotlibrc của mình. Ngoài ra, tôi cũng sử dụng điều này:

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

Hy vọng điều đó sẽ hữu ích.

+0

Đây chính xác là những gì tôi cần để có được phông chữ (keyword :) Helvetica làm việc với matplotlib/pylab trong các ô của tôi. Và tôi đã thử một vài điều! Hy vọng rằng google sẽ chỉ mục này trong trường hợp những người khác cố gắng làm như vậy. – SullX

+1

Hoàn hảo. Để biết thêm các tùy chọn phông chữ, hãy xem tại http://www.tug.dk/FontCatalogue/sansseriffonts.html và thay thế '\ usepackage {helvet}' bằng yêu thích của bạn :) – np8

12

Cách đơn giản nhất là sử dụng TeX matplotlib của nội bộ, ví dụ:

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

Nếu bạn sử dụng một LaTeX bên ngoài, bạn có thể sử dụng, ví dụ như, CM Bright phông chữ:

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

Lưu ý, rằng phông chữ CM Bright không thể mở rộng và bạn sẽ không thể lưu PDF/PS! Cùng với các tùy chọn khác với LaTeX bên ngoài tôi đã tìm thấy cho đến nay.

+0

Làm cách nào để loại bỏ hình dạng nghiêng bằng cách sử dụng TeX nội bộ của matplotlib? – Ger

1

này sẽ cho phép bạn sử dụng phông chữ Computer Modern Sans nếu bạn, như tôi, thích nó hơn 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

Điều này làm việc cho tôi, và tôi đã đấu tranh để tìm ra những phông chữ máy tính hiện đại được gọi trong phần phụ trợ. Tôi không thể tìm thấy danh sách ở bất cứ đâu. – user3087409

Các vấn đề liên quan