web-dev-qa-db-ja.com

Matplotlib / pyplot:軸範囲を強制する方法は?

Pylotを使用して標準の2D折れ線グラフを描画したいのですが、軸の値を強制的にxで0〜600、yで10kおよび20kにします。例を挙げましょう...

import pylab as p

p.title(save_file)
p.axis([0.0,600.0,1000000.0,2000000.0])

#define keys and items elsewhere..
p.plot(keys,items)
p.savefig(save_file, dpi=100)

ただし、軸は引き続きデータのサイズに調整されます。 p.axisの効果は、maxとminを強制するのではなく、maxとminを設定できるように解釈しています。 p.xlim()などを使用しようとすると同じことが起こります。

何かご意見は?

ありがとう。

50
Stuart

制限を設定した後に_p.plot_を呼び出すことが、再スケーリングの理由です。自動スケーリングをオフにすると正しい答えが得られるという点で正しいですが、xlim()またはylim()を呼び出しますafter your plotコマンド。

私はこれをかなり使ってx軸を反転させ、天文学で働いており、後方にある等級システムを使用しています(つまり、明るい星ほど小さい等級を持っています)。

_lims = xlim()
xlim([lims[1], lims[0]]) 
_
35
Simon Walker

私自身の質問に答えるために、トリックは自動スケーリングをオフにすることです...

p.axis([0.0,600.0, 10000.0,20000.0])
ax = p.gca()
ax.set_autoscale_on(False)
26
Stuart

上記の答えをすべて試した後、固定軸画像の描画方法のパイプラインをまとめました。 show関数とsavefig関数の両方に適用されました。

  1. プロットする前に:

    _fig = pylab.figure()
    ax = fig.gca()
    ax.set_autoscale_on(False)
    _

これは、subplot(1,1,1)であるaxを要求することです。

  1. プロット中:

    _ax.plot('You plot argument') # Put inside your argument, like ax.plot(x,y,label='test')
    ax.axis('The list of range') # Put in side your range [xmin,xmax,ymin,ymax], like ax.axis([-5,5,-5,200])
    _
  2. プロットの後:

    1. 画像を表示するには:

      _fig.show()
      _
    2. 図を保存するには:

      _fig.savefig('the name of your figure')
      _

_autoscale_on_をaxisに設定していても、コードの先頭にFalseを配置しても機能しないことがわかりました。

このコードを使用して、一連のアニメーションを作成しました。以下は、複数の固定軸の画像を組み合わせてアニメーションにする例です。 img

11
tk_y1275963

すべてのプロットコマンドの後にaxisを呼び出してみてください。

7
Philipp