web-dev-qa-db-ja.com

matplotlib軸の精度が異なる

先生は、グラフでは_0, 0.25, 0.5_ではなく_0.00,0.25,0.50,..._のように軸にラベルを付ける必要があると言っていました。 _0.00,0.25,0.50_(plt.yticks(np.arange(-1.5,1.5,.25)))のようにラベルを付ける方法は知っていますが、異なる精度で目盛りラベルをプロットする方法がわかりません。

私はそれを次のようにしようとしました

_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))
_

役に立たない。

6
MatMorPau22

これはすでに回答されています。たとえば、ここ Matplotlib:ティックラベルのフロートの形式を指定 。しかし、実際には、参照されている質問で使用されているものとは別のフォーマットが必要です。

したがって、このコードは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()

FormatStrFormatterに渡す文字列で、希望する精度を定義できます。上記の場合、一般的なフォーマットを表すのは "%g"です。この形式は、重要でない後続ゼロを削除します。 "%.3f"が小数点以下3桁の精度であるのに対し、 "%。1f"は小数点以下1桁の精度になる他の形式を渡すこともできます。これらのフォーマットについて詳しく説明します ここ

11
johannesmik

目盛りの位置を0.25の倍数に設定するには、matplotlib.ticker.MultipleLocator(0.25)を使用できます。次に、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