web-dev-qa-db-ja.com

PythonでMatplotlibを使ってデータのリストを使ってヒストグラムをプロトコルするにはどうすればいいですか?

matplotlib.hist()関数を使用してヒストグラムをプロットしようとしていますが、その方法がわかりません。

リストがあります

probability = [0.3602150537634409, 0.42028985507246375, 
  0.373117033603708, 0.36813186813186816, 0.32517482517482516, 
  0.4175257731958763, 0.41025641025641024, 0.39408866995073893, 
  0.4143222506393862, 0.34, 0.391025641025641, 0.3130841121495327, 
  0.35398230088495575]

そして名前のリスト(文字列)。

確率を各バーのY値、名前をX値にするにはどうすればよいですか。

59
DataVizGuys

ヒストグラムが必要な場合は、x軸にはビンがあるので、x値に「名前」を付ける必要はありません。

import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
x = np.random.normal(size = 1000)
plt.hist(x, normed=True, bins=30)
plt.ylabel('Probability');

enter image description here

しかし、データ点の数が限られていて棒グラフが必要な場合は、x軸にラベルを付けることができます。

x = np.arange(3)
plt.bar(x, height= [1,2,3])
plt.xticks(x+.5, ['a','b','c'])

enter image description here

これであなたの問題が解決するかどうか教えてください。

編集2018年11月26日

下記のコメントの通り、Matplotlib 3.0.2では以下のコードで十分です。

x = np.arange(3)
plt.bar(x, height= [1,2,3]) 
plt.xticks(x, ['a','b','c']) # no need to add .5 anymore

編集2019年5月23日

ヒストグラムに関する限り、normedパラメータは推奨されません。

MatplotlibDeprecationWarning: 'normed' kwargはMatplotlib 2.1では非推奨であり、3.1では削除される予定です。代わりに 'density'を使用してください。

だから、代わりにMatplolib 3.1からのように:

plt.hist(x, normed=True, bins=30) 

書く必要があります:

import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
x = np.random.normal(size = 1000)
plt.hist(x, density=True, bins=30) # density
plt.ylabel('Probability');

enter image description here

93

まだmatplotlibをインストールしていない場合は、コマンドを試してください。

> pip install matplotlib

図書館のインポート

import matplotlib.pyplot as plot

ヒストグラムデータ:

plot.hist(weightList,density=1, bins=20) 
plot.axis([50, 110, 0, 0.06]) 
#axis([xmin,xmax,ymin,ymax])
plot.xlabel('Weight')
plot.ylabel('Probability')

ヒストグラムを表示する

plot.show()

そして出力は以下のようになります。

enter image description here

12
Niraj

これは非常に簡単なやり方ですが、bin値を知っていてもソースデータを持っていないヒストグラムを作成したい場合は、np.random.randint関数を使用して以下の範囲内の正しい値の数を生成できます。 hist関数の各ビンをグラフ化します。例えば、

import numpy as np
import matplotlib.pyplot as plt

data = [np.random.randint(0, 9, *desired y value*), np.random.randint(10, 19, *desired y value*), etc..]
plt.hist(data, histtype='stepfilled', bins=[0, 10, etc..])

ラベルのようにあなたはこのような何かを得るためにビンとxの目盛りを整列させることができます:

#The following will align labels to the center of each bar with bin intervals of 10
plt.xticks([5, 15, etc.. ], ['Label 1', 'Label 2', etc.. ])
2
Connor Wilmers