web-dev-qa-db-ja.com

ヒストグラムに平均線を描く(matplotlib)

私はPythonでmatplotlibを使用してヒストグラムを描画していますが、データセットの平均を表す線を点線としてヒストグラムに重ねて描きたいです(または他の色でも可能です)。ヒストグラムに線を重ねる方法に関するアイデアはありますか?

私はplot()コマンドを使用していますが、垂直線の描画方法がわかりません(つまり、y軸にどの値を与える必要がありますか?

ありがとう!

49
user308827

plotまたはvlinesを使用して垂直線を描画できますが、y軸の下から上に垂直線を描画するには、axvlineがおそらく最も簡単です使用する関数。以下に例を示します。

In [80]: import numpy as np

In [81]: import matplotlib.pyplot as plt

In [82]: np.random.seed(6789)

In [83]: x = np.random.gamma(4, 0.5, 1000)

In [84]: result = plt.hist(x, bins=20, color='c', edgecolor='k', alpha=0.65)

In [85]: plt.axvline(x.mean(), color='k', linestyle='dashed', linewidth=1)
Out[85]: <matplotlib.lines.Line2D at 0x119758828>

結果: plot

103

これは古いトピックであり、マイナーな追加ですが、私がよく気に入っていることの1つは、行の横に平均値もプロットすることです。

import numpy as np
import matplotlib.pyplot as plt
np.random.seed(6789)
x = np.random.gamma(4, 0.5, 1000)
result = plt.hist(x, bins=20, color='c', edgecolor='k', alpha=0.65)
plt.axvline(x.mean(), color='k', linestyle='dashed', linewidth=1)

min_ylim, max_ylim = plt.ylim()
plt.text(x.mean()*1.1, max_ylim*0.9, 'Mean: {:.2f}'.format(x.mean()))

次の結果が生成されます。 Average line with text

13
Pörripeikko

データセットの最大値(つまり、ヒストグラムビンの値)を見て、その値に1より大きい数値(1.5など)を掛け、それを使用してy軸の値を定義します。これにより、ヒストグラム内の値に関係なく、ヒストグラムの上に表示されます。

3
smitec