2016-03-26 42 views
1

matplotlibの対数y軸に素敵なティック(指数関数的でないスカラー)を描こうとしています。一般的に私は最初の値(この例では100)をそこから取得したいと思っています。しかし、いくつかのケースでは、私は以下のような異なるティッカーを得る。私はこれをどう管理するかという手がかりを見つけませんでした。 matplotlibを特定の値で開始させ、その後自動的に感覚的なテロップを選択するという単純な方法はありますか(この例では120, 110, 100, 90, 80, 70, 60, 50, 40, 30, 20がいいでしょう)。matplotlibの対数軸に目盛りを設定するには

マイコード:

from matplotlib.ticker import ScalarFormatter, MaxNLocator 
x = range(11) 
y = [ 100., 91.3700879 , 91.01104689, 58.91189746, 
    46.99501432, 55.3816625 , 37.49715841, 26.55818469, 
    36.34538328, 37.7811044 , 47.45953131] 
fig = plt.figure() 
ax = fig.add_subplot(111) 
ax.set_yscale('log') 
ax.yaxis.set_major_locator(MaxNLocator(nbins=11, steps=[1,2,3,4,5,6,7,8,9,10])) 
ax.yaxis.set_major_formatter(ScalarFormatter()) 
ax.plot(x,y) 

結果:

enter image description here

答えて

1

あなたはset_ylim()を使用することができます。

ax.set_ylim(20, 120) 

enter image description here

これは限界がyデータの代わりに、ハードワイヤリングそれらを依存させるための一つの方法が考えられます。

ymax = round(max(y), -1) + 10 
ymin = max(round(min(y), -1) - 10, 0) 
ax.set_ylim(ymin, ymax) 

あなたはax.set_yticks()とダニの場所を強制することができます

ymax = round(max(y), -1) + 20 
ymin = max(round(min(y), -1) - 10, 0) 
ax.set_ylim(ymin, ymax) 
ax.set_yticks(range(int(ymin), int(ymax) + 1, 10)) 
ax.plot(x,y) 

について:

y = [ 100. , 114.088362 , 91.14833261, 109.33399855, 73.34902925, 
     76.43091996, 56.84863363, 65.34297117, 78.99411287, 70.93280065, 
     55.03979689] 

それはこのプロットを生成します。

enter image description here

+0

ありがとうございました。しかし、どのようにして妥当な最大値と最小値を任意の場合に計算すればよいのですか?また、上記の例では開始値(「100」)を考慮する方法を教えてください。私はあらかじめy値を知らない。それらは範囲[0、無限大[最小値は0に制限されていますが、最大値は制限されません(おそらく最大で数百万を超えません)。 – leofields

+0

プロットする前に 'y'を設定する必要があります。したがって、 'max(y)'は最大値を与えます。次の10倍程度の倍数に丸めます。 –

+0

それはあなたのために働くのですか? –

関連する問題