2017-03-20 5 views
0

私は灰色の画像のピクセルを含むDataFrameを持っています。それは、画素がどの画像に属するかを示すnと、画素がどれくらい暗いかを示すpixelの2つの列を有する。私が自分で計算したヒストグラムは、ビルド中のものと異なって見えるのはなぜですか?

enter image description here

:私は

plt.figure() 
ggplot(aes(x='pixel'), data=pixelDF) + \ 
    geom_histogram(binwidth=8) + \ 
    xlab('pixels') + \ 
    ylab('') + \ 
    ggtitle('Histogram of pixels') + \ 
    scale_y_log() + \ 
    facet_grid(y='n') 

でピクセルを印刷するとき、私はかなり異なる画像を取得する私は enter image description here

を取得するが、私は

def my_historgram(to_histogram): 
    histogram = np.histogram(to_histogram, bins=32, range=(0, 255), weights=None, density=False) 
    return (histogram) 

def get_pixel(df, i): 
    return (df.loc[df['n'] == i]['pixel']) 

def hist_calc(hist): 
    return(np.log(hist)/sum(np.log(hist))) 

imageNr = pixelDF['n'].drop_duplicates().tolist() hist, bin_edges = my_historgram(get_pixel(pixelDF, imageNr[0])) histograms = pd.DataFrame({ 
    'binNr': range(len(hist)), 
    'binValue_' + str(imageNr[0]): pd.Series(hist_calc(hist))}).set_index('binNr') for i in imageNr[1:]: 
    hist, bin_edges = my_historgram(get_pixel(pixelDF, i)) 
    histogram = pd.DataFrame({ 
     'binNr': range(len(hist)), 
     'binValue_' + str(i): pd.Series(hist_calc(hist))}).set_index('binNr') 
    histograms = histograms.join(histogram) histograms = histograms.reset_index() 

### Print new type of Histogram 

plt.figure() plotDF = pd.melt(histograms, id_vars=['binNr'], var_name='imageNr', value_name='binValue') 
ggplot(aes(x='factor(binNr)', weight='binValue'), data=plotDF) + \ 
    geom_bar() + \ 
    xlab('binNr') + \ 
    ylab('') + \ 
    ggtitle('Histograms of pixels') + \ 
    facet_grid(y='imageNr') 

で最初にそれを変換するとき

なぜですか? 2番目の画像の処理で何が間違っていますか? 「jeremycg」へ

+0

お使いのバージョンが治療変数としてbinNrを処理していて、ソートする必要があるようです。 – jeremycg

+0

@jeremycg:どうすれば変更できますか?技術的な解決策は何ですか? – Make42

答えて

0

ありがとう:「あなたのバージョンがcateogorical変数としてbinNrを扱い、ソートする必要がありましたように見える - jeremycg 2時間前」コメント

ソリューションです:単に取り除きます最後のggplotのfactor()

関連する問題