web-dev-qa-db-ja.com

pythonビニングされたデータが与えられた場合に単純なヒストグラムをプロット

カウントデータ(100個)があり、それぞれがビン(0〜99)に対応しています。これらのデータをヒストグラムとしてプロットする必要があります。ただし、ヒストグラムはこれらのデータをカウントし、データは既にビンに分けられているため、正しくプロットされません。

import random
import matplotlib.pyplot as plt
x = random.sample(range(1000), 100)
xbins = [0, len(x)]
#plt.hist(x, bins=xbins, color = 'blue') 
#Does not make the histogram correct. It counts the occurances of the individual counts. 

plt.plot(x)
#plot works but I need this in histogram format
plt.show()
26
Curious

私があなたが正しく達成したいものを理解しているなら、以下はあなたが望むものを与えるはずです:

_import matplotlib.pyplot as plt
plt.bar(range(0,100), x)
plt.show()
_

hist()は使用しませんが、既にデータをビンに入れているように見えるため、必要はありません。

36
redrah

問題はxbinsにあります。あなたは現在持っています

xbins = [0, len(x)]

リスト[0、100]が表示されます。これは、0で下と100で上に区切られた1つのビン(2ではない)のみが表示されることを意味します。 2つの不均等な間隔のビンが必要な場合は、次を使用できます。

xbins = [0, 100, 1000]

1つのビンに100未満のすべてを表示し、他のビンに他のすべてを表示します。別のオプションは、整数値を使用して、一定数の等間隔のビンを取得することです。言い換えれば

plt.hist(x, bins=50, color='blue')

ここで、binsは目的のビンの数です。

副次的に、matplotlibで何かを行う方法を思い出せないときはいつでも、通常は サムネイルギャラリー に移動し、達成しようとしていることを多かれ少なかれ見ている例を見つけます。これらの例にはすべてソースコードが付属しているため、非常に役立ちます。 matplotlibの documentation も非常に便利です。

12
jlund3

クール、ありがとう! OPがやりたかったことは次のとおりです。

import random
import matplotlib.pyplot as plt
x=[x/1000 for x in random.sample(range(100000),100)]
xbins=range(0,len(x))
plt.hist(x, bins=xbins, color='blue')
plt.show()
7
Russ

私はあなたの問題がビンであることをかなり確信しています。これは、制限のリストではなく、ビンエッジのリストです。

xbins = [0,len(x)]

あなたの場合、[0, 100]を含むリストを返します。0のビンと100のビンが必要であることを示します。したがって、0から100までのビンを1つ取得します。

xbins = [x for x in range(len(x))]

返されるもの:

[0,1,2,3, ... 99]

これは、必要なビンエッジを示します。

2
Aaron S

Matplotlibのhistを使用してこれを実現することもできますが、numpyは必要ありません。基本的に、すでにxbinsとしてビンを作成しています。この場合、xが重みになります。

plt.hist(xbins,weights=x)
1
csaladenes

Matplotlibドキュメントのヒストグラム examples をご覧ください。 hist 関数を使用する必要があります。デフォルトで期待した結果が得られない場合は、histの引数をいじって、データを準備/変換/変更してからhistに提供します。あなたが何を達成したいのかは私には本当にはっきりしていないので、私はこの時点で仕方がありません。

0