Helpex - Trao đổi & giúp đỡ Đăng nhập
23

Phông chữ của nhãn đánh dấu đánh dấu trục được tạo ra từ mã sau không phải là Helvetica, nhưng vẫn là Máy tính hiện đại serif mặc định. Bất kỳ đề xuất được đánh giá rất cao.

from matplotlib import rc, font_manager
from numpy import arange, cos, pi
from matplotlib.pyplot import figure, axes, plot, xlabel, ylabel, title, \
grid, savefig, show

sizeOfFont = 12
fontProperties = {'family':'sans-serif','sans-serif':['Helvetica'],
    'weight' : 'normal', 'size' : sizeOfFont}
ticks_font = font_manager.FontProperties(family='Helvetica', style='normal',
    size=sizeOfFont, weight='normal', stretch='normal')
rc('text', usetex=True)
rc('font',**fontProperties)
figure(1, figsize=(6,4))
ax = axes([0.1, 0.1, 0.8, 0.7])
t = arange(0.0, 1.0+0.01, 0.01)
s = cos(2*2*pi*t)+2
plot(t, s)

for label in ax.get_xticklabels():
    label.set_fontproperties(ticks_font)

for label in ax.get_yticklabels():
    label.set_fontproperties(ticks_font)

xlabel(r'\textbf{time (s)}')
ylabel(r'\textit{voltage (mV)}',fontsize=16,family='Helvetica')
title(r"\TeX\ is Number $\displaystyle\sum_{n=1}^\infty\frac{-e^{i\pi}}{2^n}$!",
    fontsize=16, color='r')
grid(True)
savefig('tex_demo.pdf')

show()
23 hữu ích 4 bình luận 51k xem chia sẻ
19

Được rồi, điều này đã làm việc cho tôi. Thay thế các dòng sau:

for label in ax.get_xticklabels():
    label.set_fontproperties(ticks_font)

for label in ax.get_yticklabels():
    label.set_fontproperties(ticks_font)

Với cái này:

from matplotlib.pyplot import gca
a = gca()
a.set_xticklabels(a.get_xticks(), fontProperties)
a.set_yticklabels(a.get_yticks(), fontProperties)

Những gì bạn đã làm trong mã gốc của bạn có ý nghĩa đối với tôi, nhưng tôi nhận được kết quả khác theo cách này. Kỳ quặc.

19 hữu ích 4 bình luận chia sẻ
23

Tôi nghĩ rằng sự nhầm lẫn ở đây bắt nguồn từ việc bạn đang trộn các lệnh phông chữ TeX và không phải TeX.

Điều này sẽ bật chế độ TeX, vì vậy tất cả văn bản được hiển thị bằng cài đặt TeX bên ngoài:

rc('text', usetex=True)

Trong dòng này, đặt nó thành sans-serif sẽ được chuyển đến TeX, nhưng TeX không thể sử dụng tên phông chữ ttf cụ thể, vì vậy phần thứ hai (liên quan đến Helvetica) bị bỏ qua. Và việc đặt văn bản nội dung mặc định trong TeX không (theo mặc định) thay đổi phông chữ toán học. Đây là (không may là hành vi TeX tiêu chuẩn).

rc('font',**{'family':'sans-serif','sans-serif':['Helvetica']})

Điều này ảnh hưởng đến bộ phông chữ được sử dụng bởi trình kết xuất văn bản toán học nội bộ của matplotlib và không ảnh hưởng đến TeX:

rc('mathtext', fontset='stixsans')

Giải pháp tôi sử dụng khi muốn tất cả sans-serif ra khỏi TeX là sử dụng gói cmbright, có thể được bật bằng cách thêm:

rc('text.latex', preamble=r'\usepackage{cmbright}')

Điều đó có thể yêu cầu cài đặt gói cmbright LaTeX nếu bạn chưa có.

23 hữu ích 0 bình luận chia sẻ
8

Tôi chỉ tìm thấy một cách đơn giản nhỏ mà bạn có thể thử. Chỉ cần gọi phương thức .xticks và đặt tên phông làm đối số do người dùng đặt.

ví dụ

import matplotlib.pyplot as plt
plt.figure()
#... do the plot you want...
plt.yticks(fontname = "Times New Roman")  # This argument will change the font.
plt.show()
8 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ python latex matplotlib , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading