2012-07-06 35 views
28

Vấn đề của tôi là tôi muốn sử dụng tiêu đề Latex ở một số ô, và không có mủ cao su ở những chỗ khác. Ngay bây giờ, matplotlib có hai phông chữ mặc định khác nhau cho các tựa đề Latex và các tựa đề không phải là Latex và tôi muốn cả hai đều nhất quán. Có một thiết lập RC tôi phải thay đổi mà sẽ cho phép điều này tự động?Matplotlib, Phông chữ nhất quán sử dụng mủ cao su

tôi tạo ra một âm mưu với đoạn mã sau:

import numpy as np 
from matplotlib import pyplot as plt 

tmpData = np.random.random(300) 

##Create a plot with a tex title 
ax = plt.subplot(211) 
plt.plot(np.arange(300), tmpData) 
plt.title(r'$W_y(\tau, j=3)$') 
plt.setp(ax.get_xticklabels(), visible = False) 

##Create another plot without a tex title 
plt.subplot(212) 
plt.plot(np.arange(300), tmpData) 
plt.title(r'Some random numbers') 
plt.show() 

Đây là mâu thuẫn tôi đang nói về. Các nhãn trục đánh dấu là mỏng tìm kiếm liên quan đến các chức danh .:

+0

Tôi tin rằng [câu trả lời này] (http://stackoverflow.com/questions/11611374/sans-serif-font-for-axes-tick-labels-with-latex) sẽ giúp bạn –

Trả lời

26

Để thực hiện văn bản tex-style/mathtext trông giống như văn bản thông thường, bạn cần phải đặt phông chữ mathtext thành Bitstream Vera Sans,

import matplotlib 
matplotlib.rcParams['mathtext.fontset'] = 'custom' 
matplotlib.rcParams['mathtext.rm'] = 'Bitstream Vera Sans' 
matplotlib.rcParams['mathtext.it'] = 'Bitstream Vera Sans:italic' 
matplotlib.rcParams['mathtext.bf'] = 'Bitstream Vera Sans:bold' 
matplotlib.pyplot.title(r'ABC123 vs $\mathrm{ABC123}^{123}$') 

Nếu bạn muốn văn bản thông thường trông giống như văn bản mathtext, bạn có thể thay đổi mọi thứ thành Stix. Điều này sẽ ảnh hưởng đến nhãn, tiêu đề, ve vv

import matplotlib 
matplotlib.rcParams['mathtext.fontset'] = 'stix' 
matplotlib.rcParams['font.family'] = 'STIXGeneral' 
matplotlib.pyplot.title(r'ABC123 vs $\mathrm{ABC123}^{123}$') 

ý tưởng cơ bản là bạn cần phải thiết lập cả các phông chữ thường và mathtext để được như vậy, và phương pháp làm như vậy là một chút mơ hồ. Bạn có thể thấy một danh sách các phông chữ tùy chỉnh,

sorted([f.name for f in matplotlib.font_manager.fontManager.ttflist]) 

Như những người khác đã đề cập, bạn cũng có thể có cao su làm cho tất cả mọi thứ cho bạn với một phông chữ bằng cách thiết lập text.usetex trong rcParams, nhưng đó là chậm và không hoàn toàn cần thiết.

11

EDIT

nếu bạn muốn thay đổi phông chữ được sử dụng bởi LaTeX bên matplotlib, hãy kiểm tra trang này

http://matplotlib.sourceforge.net/users/usetex.html

một trong các ví dụ có

from matplotlib import rc 
rc('font',**{'family':'sans-serif','sans-serif':['Helvetica']}) 
## for Palatino and other serif fonts use: 
#rc('font',**{'family':'serif','serif':['Palatino']}) 
rc('text', usetex=True) 

Chỉ cần chọn yêu thích của bạn!

Và nếu bạn muốn có một phông chữ đậm, bạn có thể thử \mathbf

plt.title(r'$\mathbf{W_y(\tau, j=3)}$') 

EDIT 2

Sau đây sẽ làm mặc định phông chữ đậm cho bạn

font = {'family' : 'monospace', 
     'weight' : 'bold', 
     'size' : 22} 

rc('font', **font) 
+0

Tôi nghĩ tôi nên làm rõ câu hỏi. Ngay bây giờ, tôi nghĩ rằng các phông chữ Latex là xấu hơn và tôi muốn mang nó phù hợp với phông chữ không phải là cao su. Tôi muốn một cái gì đó dày hơn vì vậy văn bản cốt truyện của tôi vẫn có thể đọc được nếu các ô được thu nhỏ và đưa vào một luận án/xuất bản. – ncRubert

+0

@ncRubert gotcha, kiểm tra câu trả lời cập nhật của tôi sau đó. – nye17

+0

Làm rõ thêm. Tôi muốn các nhãn trục được làm dày hơn. Chúng là phần không đọc được nhất của biểu đồ. Tôi đã cập nhật câu hỏi để phản ánh điều này. – ncRubert

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