2017-04-20 9 views
1

私の先生は、グラフでは0, 0.25, 0.5のように軸にラベルを付けなければならないと言いました。0.00,0.25,0.50,...ではありません。 0.00,0.25,0.50plt.yticks(np.arange(-1.5,1.5,.25)))のようにラベルを付ける方法はわかっていますが、異なる精度のティックラベルをプロットする方法はわかりません。matplotlib軸の精度が異なる

私は無駄なし

plt.yticks(np.arange(-2,2,1)) 
plt.yticks(np.arange(-2.25,2.25,1)) 
plt.yticks(np.arange(-1.5,2.5,1)) 

のようにそれを行うことを試みました。

+0

先生は実際に間違っています。軸の精度は変更されていないため、ラベリングする必要があります。さらに、同じ桁数を使用するほど美的です。 – ImportanceOfBeingErnest

+0

はい、私は彼が間違っていることを知っていますが、彼は正しい人ですので、私は彼のルールに合致しなければなりません。 – MatMorPau22

答えて

2

これは既に回答済みです(例:Matplotlib: Specify format of floats for tick lables)。しかし、実際には、参照されている質問で使用されている以外の形式が必要です。

ので、このコードは、あなたがFormatStrFormatterに渡す文字列であなたの希望する精度を定義することができ、あなたにy軸

import matplotlib.pyplot as plt 
import numpy as np 
from matplotlib.ticker import FormatStrFormatter 

fig, ax = plt.subplots() 

ax.yaxis.set_major_formatter(FormatStrFormatter('%g')) 
ax.yaxis.set_ticks(np.arange(-2, 2, 0.25)) 

x = np.arange(-1, 1, 0.1) 
plt.plot(x, x**2) 
plt.show() 

であなたの希望する精度を提供します。上記の場合、一般的な形式を表す "%g"です。このフォーマットは、有意でない末尾のゼロを削除します。 "%.1f"は小数点以下1桁の精度であるが、 "%.3f"は小数点以下3桁の精度であるのに対し、他の形式も渡すことができます。これらの形式については、hereで詳しく説明しています。

3

ティックの位置を0.25の倍数に設定するには、matplotlib.ticker.MultipleLocator(0.25)を使用できます。数字の右側から0を取り除く機能を使用してFuncFormatterを使用して、ティックラベルをフォーマットすることができます。

import matplotlib.pyplot as plt 
import matplotlib.ticker 

plt.plot([-1.5,0,1.5],[1,3,2]) 
ax=plt.gca() 

f = lambda x,pos: str(x).rstrip('0').rstrip('.') 
ax.xaxis.set_major_locator(matplotlib.ticker.MultipleLocator(0.25)) 
ax.xaxis.set_major_formatter(matplotlib.ticker.FuncFormatter(f)) 
plt.show() 

enter image description here

関連する問題