0

640 ポイントのデータセットがありますが、サブプロットでプロットすると、軸が 700 にスケーリングされます。スケーリングではなく、x 軸を 0 から 640 の範囲に設定するにはどうすればよいですか?

一般に、軸を任意のメジャーに設定するにはどうすればよいですか? 軸を設定するオプションを説明してください。


私が使用しているコードは次のとおりです。

    self.figure = Figure()
    self.figure.set_size_inches( (15,3) )
    self.figure.set_dpi(80)

    self.picture = self.figure.add_subplot(211)
    #self.picture.xlim(xmax=640)
    self.intensity = self.figure.add_subplot(212)

self.picture.imshow(pic)
#... where projection happens to be 640 px wide
self.intensity.plot(projection)
4

2 に答える 2

3

質問を正しく理解していると仮定すると、Axes.set_xlim()関数を使用できます。あなたの質問はほぼ正しいと思いますが、への呼び出しset_xlimは完全に正しくなく、データをプロットした後に行う必要があります。

import matplotlib.pyplot as plt

hf = plt.figure()
hf.set_size_inches( (15,3) )
hf.figure.set_dpi(80)

ha = hf.add_subplot(211)

pic = ...

ha.imshow(pic)

ha.set_xlim((0,640)) # This sets the x axis to range from 0 to 640.

x 軸の上限または下限を調整するだけの場合は、leftおよびのrightキーワード引数を使用できますAxes.set_xlim。たとえば、x 軸の上限を 640 に設定し、下限をそのままにしておくには、

ha.set_xlim(right=640)

ここで注意すべき重要な点は次の 2 つです。

  • これらのキーワード引数は、キーワード引数およびAxes.set_ylimを受け入れる とは異なります。bottomtop

  • これはまたmatplotlib.pyplot.xlim、キーワード引数xminandを受け入れるxmax(これは @tsyu80 が実際に話していた関数です) and とは異なります。これはandmatplotlib.pyplot.ylimを受け入れます。yminymax

于 2012-05-31T14:08:22.690 に答える
2

最初に従うべきいくつかのセットアップコード:

import numpy as np
import matplotlib.pyplot as plt

figure, (picture, intensity) = plt.subplots(nrows=2, figsize=(15, 3))
figure.set_dpi(80)
picture.imshow(np.random.uniform(size=(5, 50)))
intensity.plot(np.random.random(size=641))

への呼び出しに注意してくださいplt.subplots( sat end が重要です。 のない別の関数がありますs) には、matplotlib 1.1 以降が必要です。ただし、元の例のセットアップも同様に機能します。また、軸は 640 ではなく 700 にスケーリングされることに注意してください。これは、matplotlib が 700 で目盛りを描画することを好み、余分な空白がそれほど重要ではないと判断するためです。

編集:figsizeパラメーター、dpi設定、およびpicture軸は元の問題とは何の関係もないことを指摘したかっただけですが、元の例に合わせて追加しました。

クリスが言及しているように、あなたは電話することができます

intensity.set_xlim((0, 640))

代わりに、キーワード引数を渡して、目的のパラメーターのみを微調整することができます。

intensity.set_xlim(right=640)

厳密な軸の制限が必要であることがわかっているが、手動で設定したくない場合は、プロットされたデータに基づいて、軸オブジェクトを計算できます。

intensity.autoscale(tight=True)

xまたは、軸のみをスケーリングする場合は、次のようにします。

intensity.autoscale(axis='x', tight=True)

注記autoscaleは、データ制限が変更された場合 (たとえば、680 点を持つ別のデータ セットをプロットした場合) に再調整されるため、特別です。

marginsまたは、次の方法を使用できます。

intensity.margins(0)

これにより、軸と軸の両方 の制限がデータ制限に設定され、指定されたパディングが追加されます。xyy

intensity.margins(0, 0.1)

yこれにより、データ間隔の 10% に等しい間隔が追加されます。これらの関数はすべて目的どおりに機能しますが、異なる呼び出しシグネチャ (および動作) はさまざまな状況で役立ちます。

編集set_xlim:クリスの提案に基づいてキーワード引数を修正しました。

于 2012-05-31T18:05:35.690 に答える