web-dev-qa-db-ja.com

matplotlibでのy軸制限の設定

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が必要です。

302
Curious2learn

これを試して 。サブプロットにも使えます。

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

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

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

106
thetarro

できることの1つは、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)
28
Birat Bose

@ Himaの答えに追加するために、現在の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)

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

9

これでうまくいくはずです。あなたのコードは、TamásとManoj Govindanのように私のために働きます。 Matplotlibをアップデートしようとしたようです。 Matplotlibを更新できない場合(たとえば、管理者権限が不十分な場合)、おそらくmatplotlib.use()と別のバックエンドを使用することで解決することがあります。

6
Eric O Lebigot

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

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

おそらくこれは例えばxminとymaxだけを設定するのに良い方法です。

2
Antti A

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

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

(問題のコードの下のコードで生成された)Axesがsharing最初のAxesとの範囲)である場合は、必ず範囲afterそのAxesの最後のプロット)を設定してください。

0
Rainald62