Pembaruan: Lihat bagian bawah jawaban untuk cara yang sedikit lebih baik melakukannya.
Pembaruan # 2: Saya telah menemukan perubahan font judul legenda juga.
Pembaruan # 3: Ada bug di Matplotlib 2.0.0 yang menyebabkan label centang untuk sumbu logaritmik kembali ke font default. Harus diperbaiki di 2.0.1 tapi saya sudah memasukkan solusinya di bagian 2 dari jawabannya.
Jawaban ini untuk siapa saja yang mencoba mengubah semua font, termasuk untuk legenda, dan bagi siapa saja yang mencoba menggunakan font dan ukuran yang berbeda untuk setiap hal. Itu tidak menggunakan rc (yang sepertinya tidak bekerja untuk saya). Ini agak rumit tetapi saya tidak bisa memahami metode lain secara pribadi. Ini pada dasarnya menggabungkan jawaban ryggyr di sini dengan jawaban lain pada 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()
Manfaat dari metode ini adalah bahwa, dengan memiliki beberapa kamus font, Anda dapat memilih font / ukuran / berat / warna yang berbeda untuk berbagai judul, memilih font untuk label centang, dan memilih font untuk legenda, semuanya secara independen.
MEMPERBARUI:
Saya telah mengerjakan pendekatan yang sedikit berbeda, kurang berantakan yang menghilangkan kamus font, dan memungkinkan font apa pun pada sistem Anda, bahkan font .otf. Untuk memiliki font yang terpisah untuk setiap hal, cukup tulis variabel yang lebih banyak font_path
dan font_prop
sukai.
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()
Semoga ini jawaban yang komprehensif