web-dev-qa-db-ja.com

pythonの対数y軸ビン

データ列のヒストグラムを作成し、対数的にプロットしようとしています(_y-axis_)。次のコードが機能しない理由はわかりません。

_import numpy as np
import matplotlib.pyplot as plt
data = np.loadtxt('foo.bar')
fig = plt.figure()
ax = fig.add_subplot(111)
plt.hist(data, bins=(23.0, 23.5,24.0,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0))
ax.set_xlim(23.5, 28)
ax.set_ylim(0, 30)
ax.grid(True)
plt.yscale('log')
plt.show()
_

また、plt.yscale('log')の代わりに_Log=true_を_plt.hist_行に追加してみました。また、ax.set_yscale('log')を試しましたが、何も機能しないようです。空のプロットを取得するか、_y-axis_が実際に対数であるか(上記のコードを使用)、プロットされたデータはありません(ビンはありません)。

39
mannaroth

試してみる

_plt.yscale('log', nonposy='clip')
_

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

問題はバーの下部がy = 0であり、デフォルトでは、ログ変換を実行するときに無効なポイント(log(0)->未定義)をマスクすることです(これを変更する議論がありましたが、どの方向に行ったか覚えていないので、バープロット用に長方形を描画しようとすると、下のエッジがマスクされます->長方形はありません。

78
tacaswell

np.logspaceは[1-10]のビンを対数間隔で返します-私の場合、xxはnpvector> 0なので、次のコードはトリックを行います

logbins=np.max(xx)*(np.logspace(0, 1, num=1000) - 1)/9
hh,ee=np.histogram(xx, density=True, bins=logbins)
3
Luca Rigazio