web-dev-qa-db-ja.com

ラテックスを使用してレンダリングするときに、matplotlibプロットの軸目盛りフォントを変更するにはどうすればよいですか?

次のコードから生成される軸目盛りラベルのフォントはHelveticaではありませんが、デフォルトのセリフComputer Modernのままです。どんな提案も大歓迎です。

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()
20
Rob

これでうまくいきました。次の行を置き換えます。

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

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

これとともに:

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

元のコードで行ったことは私には理にかなっていますが、この方法では異なる結果が得られます。変。

17
Taro Sato

ここでの混乱は、TeXと非TeXのフォントコマンドが混在していることが原因だと思います。

これによりTeXモードがオンになり、すべてのテキストが外部TeXインストールでレンダリングされます。

rc('text', usetex=True)

この行では、sans-serifに設定するとTeXに渡されますが、特定のttfフォント名はTeXでは使用できないため、2番目の部分(Helveticaを含む)は無視されます。また、TeXでデフォルトの本文テキストを設定しても、(デフォルトでは)数学フォントは変更されません。これは(残念ながら標準的なTeXの動作です)。

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

これは、matplotlibの内部mathtextレンダラーで使用されるフォントセットに影響し、TeXには影響しません。

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

TeXからすべてのsans-serifが必要なときに使用する解決策は、cmbrightパッケージを使用することです。これは、以下を追加することでオンにできます。

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

Cmbright LaTeXパッケージをまだインストールしていない場合は、インストールする必要があります。

18
mdboom

私はあなたが試すことができる少し簡単な方法を見つけました。 .xticksメソッドを呼び出して、ユーザー設定の引数としてフォント名を指定するだけです。

例えば.

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()
3
CEKim