matplotlibでy軸の限界を設定する


416

matplotlibのy軸の範囲の設定についてサポートが必要です。これが失敗したコードです。

import matplotlib.pyplot as plt

plt.figure(1, figsize = (8.5,11))
plt.suptitle('plot title')
ax = []
aPlot = plt.subplot(321, axisbg = 'w', title = "Year 1")
ax.append(aPlot)
plt.plot(paramValues,plotDataPrice[0], color = '#340B8C', 
     marker = 'o', ms = 5, mfc = '#EB1717')
plt.xticks(paramValues)
plt.ylabel('Average Price')
plt.xlabel('Mark-up')
plt.grid(True)
plt.ylim((25,250))

このプロットのデータを使用すると、y軸の範囲が20と200になります。ただし、20と250の範囲が必要です。


1
plt.show()最後に追加してプロットを表示すると、Matplotlib 1.0.0で動作します。どのバージョンとどのバックエンドを使用していますか?
タマシュ

14
Matplotlib 0.98.5.2、Python 2.6.2で私のために働いています。私は両方を試してみましたplt.ylim((25,250))plt.ylim(ymax = 250, ymin = 25)Aggバックエンドを使用しています。
Manoj Govindan

1
お二人に感謝します。PDFバックエンドで動作しますか?
Curious2learn

1
注:axisbg現在非推奨
SherylHohman

回答:


616

これを試して 。サブプロットでも機能します。

axes = plt.gca()
axes.set_xlim([xmin,xmax])
axes.set_ylim([ymin,ymax])

201
ところで、これは愚かな略語手段「であるGC urrent A XES」。
Lenar Hoyt 2017

32
None計算をmatplotlibに任せる1つの値を設定することもできます。たとえば、axes.set_ylim([ymin,None])
linqu

129

あなたのコードは私にも役立ちます。ただし、別の回避策は、プロットの軸を取得してから、y値のみを変更することです。

x1,x2,y1,y2 = plt.axis()
plt.axis((x1,x2,25,250))


1
x1とx2をNoneに設定できます。
Hielke Walinga

78

あなたができることの一つは、matplotlib.pyplot.axisを使用して自分で軸範囲を設定することです。

matplotlib.pyplot.axis

from matplotlib import pyplot as plt
plt.axis([0, 10, 0, 20])

0、10はx軸範囲用です。0,20はy軸の範囲用です。

または、matplotlib.pyplot.xlimまたはmatplotlib.pyplot.ylimを使用することもできます

matplotlib.pyplot.ylim

plt.ylim(-2, 2)
plt.xlim(0,10)

24

からオブジェクトをインスタンス化しmatplotlib.pyplot.axesて呼び出すことができますset_ylim()。これは次のようなものです。

import matplotlib.pyplot as plt
axes = plt.axes()
axes.set_ylim([0, 1])

16

これは少なくともmatplotlibバージョン2.2.2で機能しました:

plt.axis([None, None, 0, 100])

おそらくこれは、たとえばxminとymaxのみなどを設定するための良い方法です。


14

@ヒマの答えに追加するには、現在のxまたはyの制限を変更する場合は、以下を使用できます。

import numpy as np # you probably alredy do this so no extra overhead
fig, axes = plt.subplot()
axes.plot(data[:,0], data[:,1])
xlim = axes.get_xlim()
# example of how to zoomout by a factor of 0.1
factor = 0.1 
new_xlim = (xlim[0] + xlim[1])/2 + np.array((-0.5, 0.5)) * (xlim[1] - xlim[0]) * (1 + factor) 
axes.set_xlim(new_xlim)

これは、デフォルトのプロット設定から少しだけズームアウトまたはズームインしたいときに特に便利です。


7

これはうまくいくはずです。あなたのコードは、TamasやManoj Govindanのように、私にとってはうまくいきます。Matplotlibを更新してみてください。Matplotlibを更新できない場合(たとえば、管理者権限が不十分な場合)、別のバックエンドを使用するmatplotlib.use()ことが役立つ可能性があります。


チェックしてくれてありがとう!私はpdfバックエンド(matplotlib.use('PDF'))を使用しています。Enthought Python Distributionの最新バージョンに付属するバージョンを使用しています。PDFバックエンドで動作するかどうか確認してください。ありがとう!
Curious2learn

Mac OS X上のPDFバックエンドで動作します。出力ファイルが本当に更新されていることを確認しplt.savefig()ますか?
Eric O Lebigot、2009

問題に気づいたと思います。私が取る場合aPlot =plt.subplotラインそれはあまりにも私のために動作します。そのような変数にサブプロットを割り当てる場合、軸の範囲を設定する他の方法を使用する必要があるようです。本当?
Curious2learn

1
私が知る限り、plt.ylim()は、実行時に設定される現在の軸に制限を適用しますplt.subplot()。またplt.subplot()、それが返す軸がどのように使用されるか(変数に入れられるかどうかなど)に注意することも信じられません。だから私はそれがうまくいくと思います。それは私のマシンで動作します。
Eric O Lebigot、

6

微調整のためだけに。軸の境界の1つだけを設定し、他の境界を変更しない場合は、次のステートメントの1つ以上を選択できます

plt.xlim(right=xmax) #xmax is your value
plt.xlim(left=xmin) #xmin is your value
plt.ylim(top=ymax) #ymax is your value
plt.ylim(bottom=ymin) #ymin is your value

xlimylimのドキュメントを見てください。


0

軸(質問に示されているコードの下のコードによって生成された)が範囲を最初の軸と共有している場合は、その軸の最後のプロットのに範囲を設定してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.