2017-04-06 7 views
4

I次の簡単なPythonのコードを持っている:matplotlibの:目盛りラベルは、フォント設定(LaTeXのテキストの一例)とinconsistある

import numpy as np 
import matplotlib.pyplot as plt 

plt.rc('font', size=20, family="Times") # use a font with serifs 

# the following line triggers the problem 
plt.rc('text', usetex=True)    # activate LaTeX text rendering 

fig = plt.figure(figsize=(8,6))   # (width,height) in inches 
ax1 = fig.add_subplot(1, 1, 1)   # rows cols plotnumber 

ax1.plot(np.linspace(1,10,10), np.linspace(1,10,10)**2) 

ax1.set_xlabel(r'\textit{x} in a.u.') 
ax1.set_ylabel(r'\textit{y} in a.u.') 

plt.show() 
これは、次の図になり

Font thickness in tick-labels wrong

あなたが見ることができるように、ティックラベルは軸ラベル(または軸ラベルが太すぎる)に比べてフォントが細すぎます。私はこれがLaTeXのテキストレンダリング(コードのコメントを参照)を有効にしていることが原因であることを知りましたが、LaTeXのテキストレンダリングをオフにしたくないので、これを変更する方法がありません。

フォントの太さ(太さの複数形とは何ですか?)が矛盾していて、それを変更する方法はありますか?

アップデート1llap42からの提案に続いて、ハックは

plt.xticks([2, 4, 6, 8, 10], ['2', '4', '8', '10' ]) 

を行うことであろう。しかし、それは唯一のハックで、よりよい解決策が存在しなければなりません。

+0

usetex'はラベルのみに適用される 'のように見えます。ラベルに数字がある場合、それは厚いですか? (btw:thicknesses) –

+0

ラベルの@ElmarPeise番号が太くなっているので、 'usetex'も数字に適用されます – Alf

+0

' plt.rc()の呼び出しの順序は関係ありますか?つまり 'plt.rc( 'text'、usetex = True)'を試してから、 'plt.rc( 'font'、size = 20、family =" Times ")'? – Lewis

答えて

2

コメントの中で述べたように、これはむしろラテックスで使用するときはフォント設定に従わないティックラベルの問題です。

この問題はScalarFormatter(軸のデフォルトフォーマッタ)を使用している場合にのみ発生するようです。私はGitHubにこれについてan issueを投稿しました。

回避策は、別のフォーマッタを使用することです。例えばStrMethodFormatter

import matplotlib.pyplot as plt 
import matplotlib.ticker 

plt.rc('text', usetex=True) 
plt.rc('font',family = 'sans-serif', size=20) 

fig , ax = plt.subplots(figsize=(5,3)) 

ax.set_xlabel(r'\textit{x} in a.u.') 
ax.set_ylabel(r'\textit{y} in a.u.') 

fmt = matplotlib.ticker.StrMethodFormatter("{x}") 
ax.xaxis.set_major_formatter(fmt) 
ax.yaxis.set_major_formatter(fmt) 

plt.tight_layout() 
plt.show() 

enter image description here

+0

はい、うまくいきました。GitHubの問題を開いてくれてありがとう – Alf

関連する問題