Skimage.exposureからMatplotlibヒストグラムを描画したいだけですが、ValueError: bins must increase monotonically.
元の画像は here から来て、ここに私のコード:
from skimage import io, exposure
import matplotlib.pyplot as plt
img = io.imread('img/coins_black_small.jpg', as_grey=True)
hist,bins=exposure.histogram(img)
plt.hist(bins,hist)
ValueError:ビンは単調に増加する必要があります。
しかし、ビンの値をソートすると同じエラーが発生します。
import numpy as np
sorted_bins = np.sort(bins)
plt.hist(sorted_bins,hist)
ValueError:ビンは単調に増加する必要があります。
ようやくビンの値を確認しようとしましたが、私の意見ではソートされているようです(この種のテストについてのアドバイスもありがたいです)。
if any(bins[:-1] >= bins[1:]):
print "bim"
これからの出力はありません。
何が起こるかについて何か提案はありますか?
私はPythonを学習しようとしているので、のんびりしてください。ここに私のインストール(Linux Mint):
Matplotlib hist
は、最初にビニングされたカウントではなく、最初の引数としてデータを受け入れます。プロットするには、matplotlib bar
を使用します。 numpy histogram
とは異なり、skimage exposure.histogram
はビンの中心を返します。
width = bins[1] - bins[0]
plt.bar(bins, hist, align='center', width=width)
plt.show()
_plt.hist
_の署名はplt.hist(data, bins, ...)
です。したがって、すでに計算されたヒストグラムをビンとしてmatplotlib hist
関数に挿入しようとしています。もちろん、ヒストグラムはソートされないため、「ビンは単調に増加する必要があります」というエラーがスローされます。
もちろんplt.hist(hist, bins)
を使用することもできますが、ヒストグラムのヒストグラムを作成することに意味があるかどうかは疑問です。最初のヒストグラムの結果を単純にプロットしたいと思います。
棒グラフを使用すると、この目的に役立ちます。
_hist,bins=numpy.histogram(img)
plt.bar(bins[:-1], hist, width=(bins[-1]-bins[-2]), align="Edge")
_