1. ホーム
  2. python

[解決済み] matplotlib で x 軸または y 軸の "目盛り頻度" を変更する

2022-03-15 04:45:48

質問

Pythonが私のデータをどのようにプロットするかを修正しようとしています。

セイ

x = [0,5,9,10,15]

そして

y = [0,1,2,3,4]

それなら、私ならこうします。

matplotlib.pyplot.plot(x,y)
matplotlib.pyplot.show()

で、x軸の刻みは5刻みでプロットされています。1の間隔で表示させる方法はありますか?

解決方法は?

マークを付ける位置を明示的に設定するには plt.xticks :

plt.xticks(np.arange(min(x), max(x)+1, 1.0))


例えば

import numpy as np
import matplotlib.pyplot as plt

x = [0,5,9,10,15]
y = [0,1,2,3,4]
plt.plot(x,y)
plt.xticks(np.arange(min(x), max(x)+1, 1.0))
plt.show()


( np.arange が使われ、Pythonの range 関数は、万が一のために min(x)max(x) はint型ではなくfloat型です)。


plt.plot (または ax.plot ) 関数は、自動的にデフォルトの xy の制限を受けます。これらの制限を維持したまま、目盛りのステップサイズだけを変更したい場合は、次のようにします。 ax.get_xlim() を使用して、Matplotlib が既に設定した制限を発見することができます。

start, end = ax.get_xlim()
ax.xaxis.set_ticks(np.arange(start, end, stepsize))

デフォルトのティックフォーマッターは、ティック値を有効数字に丸めるという適切な仕事をするはずです。しかし、もっと細かく書式を制御したい場合は、独自のフォーマッタを定義することができます。たとえば

ax.xaxis.set_major_formatter(ticker.FormatStrFormatter('%0.1f'))

以下は実行可能な例です。

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

x = [0,5,9,10,15]
y = [0,1,2,3,4]
fig, ax = plt.subplots()
ax.plot(x,y)
start, end = ax.get_xlim()
ax.xaxis.set_ticks(np.arange(start, end, 0.712123))
ax.xaxis.set_major_formatter(ticker.FormatStrFormatter('%0.1f'))
plt.show()