Cập nhật: Xem phần dưới của câu trả lời để biết cách làm tốt hơn một chút.
Cập nhật # 2: Tôi cũng đã tìm ra việc thay đổi phông chữ tiêu đề huyền thoại.
Cập nhật # 3: Có lỗi trong Matplotlib 2.0.0 gây ra các nhãn đánh dấu cho các trục logarit trở lại phông chữ mặc định. Cần được sửa trong 2.0.1 nhưng tôi đã bao gồm cách giải quyết trong phần 2 của câu trả lời.
Câu trả lời này dành cho bất kỳ ai đang cố gắng thay đổi tất cả các phông chữ, bao gồm cả chú giải và cho bất kỳ ai đang cố gắng sử dụng các phông chữ và kích cỡ khác nhau cho mỗi thứ. Nó không sử dụng RC (dường như không hoạt động đối với tôi). Nó khá cồng kềnh nhưng tôi không thể nắm bắt được bất kỳ phương pháp nào khác. Về cơ bản, nó kết hợp câu trả lời của ryggyr ở đây với các câu trả lời khác về SO.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as font_manager
# Set the font dictionaries (for plot title and axis titles)
title_font = {'fontname':'Arial', 'size':'16', 'color':'black', 'weight':'normal',
'verticalalignment':'bottom'} # Bottom vertical alignment for more space
axis_font = {'fontname':'Arial', 'size':'14'}
# Set the font properties (for use in legend)
font_path = 'C:\Windows\Fonts\Arial.ttf'
font_prop = font_manager.FontProperties(fname=font_path, size=14)
ax = plt.subplot() # Defines ax variable by creating an empty plot
# Set the tick labels font
for label in (ax.get_xticklabels() + ax.get_yticklabels()):
label.set_fontname('Arial')
label.set_fontsize(13)
x = np.linspace(0, 10)
y = x + np.random.normal(x) # Just simulates some data
plt.plot(x, y, 'b+', label='Data points')
plt.xlabel("x axis", **axis_font)
plt.ylabel("y axis", **axis_font)
plt.title("Misc graph", **title_font)
plt.legend(loc='lower right', prop=font_prop, numpoints=1)
plt.text(0, 0, "Misc text", **title_font)
plt.show()
Lợi ích của phương pháp này là, bằng cách có một số từ điển phông chữ, bạn có thể chọn các phông chữ / kích cỡ / trọng lượng / màu sắc khác nhau cho các tiêu đề khác nhau, chọn phông chữ cho nhãn tick và chọn phông chữ cho chú giải, tất cả đều độc lập.
CẬP NHẬT:
Tôi đã tìm ra một cách tiếp cận hơi khác, ít lộn xộn hơn với các từ điển phông chữ và cho phép bất kỳ phông chữ nào trên hệ thống của bạn, ngay cả các phông chữ .otf. Để có phông chữ riêng cho từng thứ, chỉ cần viết nhiều hơn font_path
và font_prop
thích các biến.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as font_manager
import matplotlib.ticker
# Workaround for Matplotlib 2.0.0 log axes bug https://github.com/matplotlib/matplotlib/issues/8017 :
matplotlib.ticker._mathdefault = lambda x: '\\mathdefault{%s}'%x
# Set the font properties (can use more variables for more fonts)
font_path = 'C:\Windows\Fonts\AGaramondPro-Regular.otf'
font_prop = font_manager.FontProperties(fname=font_path, size=14)
ax = plt.subplot() # Defines ax variable by creating an empty plot
# Define the data to be plotted
x = np.linspace(0, 10)
y = x + np.random.normal(x)
plt.plot(x, y, 'b+', label='Data points')
for label in (ax.get_xticklabels() + ax.get_yticklabels()):
label.set_fontproperties(font_prop)
label.set_fontsize(13) # Size here overrides font_prop
plt.title("Exponentially decaying oscillations", fontproperties=font_prop,
size=16, verticalalignment='bottom') # Size here overrides font_prop
plt.xlabel("Time", fontproperties=font_prop)
plt.ylabel("Amplitude", fontproperties=font_prop)
plt.text(0, 0, "Misc text", fontproperties=font_prop)
lgd = plt.legend(loc='lower right', prop=font_prop) # NB different 'prop' argument for legend
lgd.set_title("Legend", prop=font_prop)
plt.show()
Hy vọng rằng đây là một câu trả lời toàn diện