私はmatplotlibを使用して1つの対数軸でグラフをプロットしたいです。
私はドキュメントを読んできましたが、構文を理解することはできません。おそらくそれはプロット引数の'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()
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()
まず第一に、pylab
とpyplot
のコードを混在させるのはそれほどきれいではありません。さらに、 pyplotスタイルは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軸のスケールを変更することもできます。
私の質問をチェックしてください 「log」と「symlog」の違いは何ですか? matplotlibが提供するグラフスケールのいくつかの例を見る。
単にplotの代わりに 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()
あなたが対数の底を変えたいならば、単に加えなさい:
plt.yscale('log',basey=2)
# where basex or basey are the bases of log
一部のコメントでは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
だから私がよく使うように単純に洗練されていないAPIを使っているのなら(私はipythonでよく使っています)、これは単に
yscale('log')
plot(...)
これが簡単な答えを探している人に役立つことを願っています! :)。