8

一部のデータのサブセットをプロットしようとしていますが、x 軸の範囲を設定した後、y 軸の範囲が適切に更新されません。x 軸の制限を設定した後に、matplotlib に y 軸の制限を更新させる方法はありますか?

たとえば、次のプロットを考えてみましょう。

import numpy
import pylab
pylab.plot(numpy.arange(100)**2.0)

与える:1 つの全範囲をプロット

これは正常に動作します。ただし、x=0 から x=10 までの部分のみを表示したい場合は、y スケーリングが台無しになります。

pylab.plot(numpy.arange(100)**2.0)
pylab.xlim(0,10)

これは次を与えます: 1 サブセットをプロット.

前者の場合、x 軸と y 軸は適切にスケーリングされます。後者の場合、データがプロットされていなくても、y 軸は同じようにスケーリングされます。y 軸のスケーリングを更新するように matplotlib に指示するにはどうすればよいですか?

明らかな回避策は、データ自体のサブセットをプロットするか、データを調べて手動で y 軸の制限をリセットすることですが、どちらもかなり面倒です。

アップデート:

上記の例は簡略化されており、より一般的なケースでは次のようになります。

pylab.plot(xdata, ydata1)
pylab.plot(xdata, ydata2)
pylab.plot(xdata, ydata3)
pylab.xlim(xmin, xmax)

手動でy軸範囲を設定することはもちろん可能です

subidx = N.argwhere((xdata >= xmin) & (xdata <= xmax))
ymin = N.min(ydata1[subidx], ydata2[subidx], ydata3[subidx])
ymax = N.max(ydata1[subidx], ydata2[subidx], ydata3[subidx])
pylab.xlim(xmin, xmax)

しかし、これは控えめに言っても面倒です(imho)。プロット範囲を手動で計算せずにこれを行うより速い方法はありますか? ありがとう!

更新 2:

関数autoscaleはスケーリングを行い、このジョブに適しているように見えますが、軸を個別に扱い、軸の制限に関係なく、データ範囲全体にのみスケーリングします。

4

1 に答える 1

2

データの検査が面倒だとはどういう意味ですか? コードを書くという点では、それほど悪くはありません。次のようなものを試してください

pylab.ylim(numpy.min(data), numpy.max(data))

...どこにいるdataことができますnumpy.arange(100)[0:11]

一般的なケースでは、xdataandがある場合ydata(ただし、それらがソートされていると仮定して)、次のようにする必要があります。

from bisect import bisect
sub_ydata = ydata[bisect(xdata, xmin):bisect(xdata, xmax)]
pylab.ylim(numpy.min(sub_ydata), numpy.max(sub_ydata))

計算的に難しいということであれば、そのような計算なしでどうやってそれを実行できるかわかりませんmatplotlib

于 2012-04-10T22:18:55.807 に答える