2

matplotlibでヒストグラムを生成しています。

私は主に最も低いビンに関心があるので、ビンの幅を等しくしない必要があります。今私はこれをやっています:

plt.hist(hits_array, bins = (range(0,50,10) + range(50,550,50)))

これにより、必要なものが作成されます(最初の5つのビンの幅は10、残りの50)が、すべてのビンが同じ軸に表示されるため、最初の5つのビンはもちろん後者のビンよりも狭くなります。

x軸またはヒストグラム自体に影響を与えて、最初の5つのビンの後でスケールを壊して、すべてのビンが同じ幅で表示されるようにする方法はありますか?

(これにより、歪んだビューが作成されることを認識しています。軸の2つの異なるスケールの部分の間に少しスペースを空けてもかまいませんが、それで問題ありません。)

どんな助けでも大歓迎です。ありがとう!

4

3 に答える 3

4

私はここで同様の質問をしました、そして答えは汚いハックを使うことでした。 高い値のコレクションビンを含むMatplotlibヒストグラム

したがって、次のコードを使用すると、すでに持っている醜いヒストグラムが得られます。

def plot_histogram_04():
    limit1, limit2 = 50, 550
    binwidth1, binwidth2 = 10, 50    
    data = np.hstack((np.random.rand(1000) * limit1, np.random.rand(100) * limit2))

    bins = range(0, limit1, binwidth1) + range(limit1, limit2, binwidth2)

    plt.subplots(1, 1)
    plt.hist(data, bins=bins)
    plt.savefig('my_plot_04.png')
    plt.close()

ここに画像の説明を入力してください

ビンを同じ幅にするためには、実際に同じ幅にする必要があります。これは、すべてが同じ幅のビンに収まるようにデータを操作してから、xlabelをいじることを意味します。

def plot_histogram_05():
    limit1, limit2 = 50, 550
    binwidth1, binwidth2 = 10, 50

    data = np.hstack((np.random.rand(1000) * limit1, np.random.rand(100) * limit2))

    orig_bins = range(0, limit1, binwidth1) + range(limit1, limit2 + binwidth2, binwidth2)
    data = [(i - limit1) / (binwidth2 / binwidth1) + limit1 
            if i >= limit1 else i for i in data]
    bins = range(0, limit2 / (binwidth2 / binwidth1) + limit1, binwidth1)

    _, ax = plt.subplots(1, 1)
    plt.hist(data, bins=bins)

    xlabels = np.array(orig_bins, dtype='|S3')
    N_labels = len(xlabels)
    print xlabels
    print bins
    plt.xlim([0, bins[-1]])
    plt.xticks(binwidth1 * np.arange(N_labels))
    ax.set_xticklabels(xlabels)

    plt.savefig('my_plot_05.png')
    plt.close()

ここに画像の説明を入力してください

于 2014-10-07T05:28:56.007 に答える
2

を使用できbar、軸を分割する必要はありません。これが例です、

import matplotlib.pylab as plt
import numpy as np

data = np.hstack((np.random.rand(1000)*50,np.random.rand(100)*500))
binwidth1,binwidth2=10,50
bins=range(0,50,binwidth1)+range(50,550,binwidth2)

fig,(ax) = plt.subplots(1, 1)

y,binEdges=np.histogram(data,bins=bins)

ax.bar(0.5*(binEdges[1:]+binEdges[:-1])[:5], y[:5],width=.8*binwidth1,align='center')
ax.bar(0.5*(binEdges[1:]+binEdges[:-1])[5:], y[5:],width=.8*binwidth1,align='center')
plt.show()

ここに画像の説明を入力してください

本当に軸を分割したい場合は、こちらをご覧ください。

于 2012-08-29T16:27:19.180 に答える
1
import pandas as pd
import numpy as np

df= data

bins = np.arange(0,0.1,0.001)
df.hist(bins=bins,color='grey')
于 2018-10-24T09:56:10.837 に答える