2009-04-21 8 views
247

matplotlibを使って1つの対数軸のグラフをプロットしたい。Pythonでmatplotlibを使って対数軸をプロットする

私はドキュメントを読んできましたが、構文を理解することはできません。私はそれはおそらく、単純なもののようなプロットの引数で'scale=linear'だということを知っているが、私はそれを右

サンプル・プログラムを得るように見えることはできません。

import pylab 
import matplotlib.pyplot as plt 
a = [pow(10, i) for i in range(10)] 
fig = plt.figure() 
ax = fig.add_subplot(2, 1, 1) 

line, = ax.plot(a, color='blue', lw=2) 
pylab.show() 

答えて

55

をあなたは、単にプロットの代わりにsemilogyを使用する必要があります。

from pylab import * 
import matplotlib.pyplot as pyplot 
a = [ pow(10,i) for i in range(10) ] 
fig = pyplot.figure() 
ax = fig.add_subplot(2,1,1) 

line, = ax.semilogy(a, color='blue', lw=2) 
show() 
+2

1)を'。 – EOL

+1

LOL、私はlog(FloatArray)を全日試していましたが、あなたのお世話になりました – Pradeep

+3

[semilogx](http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.semilogx)もあります。両方の軸のログが必要な場合は、[loglog](http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.loglog)を使用してください。 – drevicko

259

Axes.set_yscaleの方法を使用できます。これにより、Axesオブジェクトの作成後にスケールを変更することができます。これにより、必要に応じてユーザーがスケールを選択できるようにコントロールを作成することもできます。追加する

該当する行は次のようになります。

ax.set_yscale('log') 

あなたはリニアスケールに戻すために'linear'を使用することができます。ここにあなたのコードは次のようになります:

import pylab 
import matplotlib.pyplot as plt 
a = [pow(10, i) for i in range(10)] 
fig = plt.figure() 
ax = fig.add_subplot(2, 1, 1) 

line, = ax.plot(a, color='blue', lw=2) 

ax.set_yscale('log') 

pylab.show() 

result chart

+6

この方法は、あらゆる種類のプロット(ヒストグラムなど) "プロット"(これはsemilogx/semilogyの機能)だけではありません –

+1

指数軸を使いたいと思ったらどうなりますか? –

+13

ここでは、軸を2の累乗で使う方法を探しました:pylab.gca()。set_xscale( 'log'、basex = 2) – zje

223

まず第一に、それはpylabpyplotコードを混在することは非常に整頓はありません。さらに何か、pyplot style is preferred over using pylab。ここで

pyplot機能を使用して、少しクリーンアップコードです:

from matplotlib import pyplot 

a = [ pow(10,i) for i in range(10) ] 

pyplot.subplot(2,1,1) 
pyplot.plot(a, color='blue', lw=2) 
pyplot.yscale('log') 
pyplot.show() 

関連する機能がpyplot.yscale()です。オブジェクト指向バージョンを使用する場合は、メソッドAxes.set_yscale()で置き換えてください。 pyplot.xscale()(またはAxes.set_xscale())を使用して、X軸のスケールを変更することもできます。

私の質問What is the difference between ‘log’ and ‘symlog’?を調べると、matplotlibが提供するグラフスケールの例がいくつか確認できます。

+0

これを行う方法を理解しようとすると苦労した。この答えは私の一日を救った! – HWende

+9

'pyplot.semilogy()'がより直接的です。 – EOL

8

いくつかのコメントは、ax.set_yscale('log')が「最も良い」解決策であると言いましたので、これは少し話題ではないことを私は知っています。ヒストグラムとバープロットにはax.set_yscale('log')を使用することはお勧めしません。私のバージョン(0.99.1.1)ではいくつかのレンダリングの問題にぶつかりました。しかし、barとhistの両方にyスケールをlogに設定するオプションの引数があります。これはうまくいきます。

参照: http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.bar

http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.hist

4

だから、単に私が頻繁に(私はipythonたくさんでそれを使用)していますように、これは単に

yscale('log') 
plot(...) 
で、洗練されていないAPIを使用している場合

希望の方は、簡単な回答をお探しの方にお勧めします。 :)。

4

あなたは対数の底を変更したい場合は、単に追加します(semilogyの `のための

plt.yscale('log',basey=2) 
# where basex or basey are the bases of log 
関連する問題