Güncelleme: Cevabı daha iyi yapmanın bir yolu için cevabın alt kısmına bakınız.
Güncelleme # 2: Efsane başlık yazı tiplerini de değiştirdim.
Güncelleme # 3: Matplotlib 2.0.0'da , logaritmik eksenlerin onay etiketlerinin varsayılan yazı tipine dönmesine neden olan bir hata var. 2.0.1'de düzeltilmelidir, ancak çözümün 2. bölümüne geçici çözümü ekledim.
Bu yanıt, açıklama dahil olmak üzere tüm yazı tiplerini değiştirmeye çalışan herkes ve her şey için farklı yazı tipleri ve boyutları kullanmaya çalışan herkes içindir. (Benim için işe yaramaz gibi görünüyor) rc kullanmaz. Oldukça hantal ama kişisel olarak başka bir yöntemle kavrayamadım. Temel olarak burada ryggyr'ın cevabını SO'daki diğer cevaplarla birleştirir.
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()
Bu yöntemin yararı, çeşitli yazı tipi sözlüklerine sahip olarak, çeşitli başlıklar için farklı yazı tipleri / boyutları / ağırlıkları / renkleri seçebilmeniz, onay etiketleri için yazı tipini seçebilmeniz ve efsane için yazı tipini bağımsız olarak seçebilmenizdir.
GÜNCELLEME:
Yazı tipi sözlüklerini ortadan kaldıran ve sisteminizdeki herhangi bir yazı tipine, hatta .otf yazı tiplerine izin veren biraz farklı, daha az karmaşık bir yaklaşım geliştirdim. Her şey için ayrı yazı tiplerine sahip olmak için daha fazla font_path
ve font_prop
benzer değişkenler yazmanız yeterlidir .
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()
Umarım bu kapsamlı bir cevaptır