75

絶対値ではなく、データセット全体のサイズに対する各列のパーセンテージを Y 軸に表示して、2 つのヒストグラムを比較したいと思います。それは可能ですか?私はパンダとmatplotlibを使用しています。ありがとう

4

6 に答える 6

90

( for ) はdensity=True、 1に等しいヒストグラムを返します。ヒストグラムの合計を 1 にしたい場合は、Numpy の histogram() を使用して、結果を自分で正規化できます。normed=Truematplotlib < 2.2.0np.sum(pdf * np.diff(bins))

x = np.random.randn(30)

fig, ax = plt.subplots(1,2, figsize=(10,4))

ax[0].hist(x, density=True, color='grey')

hist, bins = np.histogram(x)
ax[1].bar(bins[:-1], hist.astype(np.float32) / hist.sum(), width=(bins[1]-bins[0]), color='grey')

ax[0].set_title('normed=True')
ax[1].set_title('hist = hist / hist.sum()')

ここに画像の説明を入力

ところで:左のプロットの最初のビンでの奇妙なプロットの不具合。

于 2013-07-26T09:01:44.683 に答える
27

Pandas プロットは、それぞれの matplotlib 関数から追加のキーワード引数を受け入れることができます。したがって、ここで他の人のコメントから完全を期すために、これがその方法です。

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(100,2), columns=list('AB'))

df.hist(density=1)

また、直接比較するには、これも良い方法かもしれません。

df.plot(kind='hist', density=1, bins=20, stacked=False, alpha=.5)
于 2015-09-23T20:02:57.183 に答える
20

@CarstenKönigが正しい方法を見つけたようです:

df.hist(bins=20, weights=np.ones_like(df[df.columns[0]]) * 100. / len(df))
于 2016-01-13T01:34:43.230 に答える