過去 90 日間、毎日測定した値があるとします。値のヒストグラムをプロットしたいのですが、閲覧者が過去 90 日間の特定の重複しないサブセットにわたって測定値が蓄積された場所を簡単に確認できるようにしたいと考えています。これを行うには、ヒストグラムの各バーをチャンクに「分割」します。最初の観測用に 1 つのチャンク、より最近の観測用に 1 つ、最新の観測用に 1 つ。
これは の仕事のように聞こえますdf.plot(kind='bar', stacked=True)
が、詳細を正しく理解するのに苦労しています。
これが私がこれまでに持っているものです:
import numpy as np
import pandas as pd
import seaborn as sbn
np.random.seed(0)
data = pd.DataFrame({'values': np.random.randn(90)})
data['bin'] = pd.cut(data['values'], 15, labels=False)
forhist = pd.DataFrame({'first70': data[:70].groupby('bin').count()['bin'],
'next15': data[70:85].groupby('bin').count()['bin'],
'last5': data[85:].groupby('bin').count()['bin']})
forhist.plot(kind='bar', stacked=True)
そして、それは私に与えます:
このグラフにはいくつかの欠点があります。
- バーが間違った順序で積み上げられています。
last5
上とnext15
真ん中にある必要があります。つまり、 の列の順序で積み重ねる必要がありますforhist
。 - バーの間に水平スペースがあります
- x 軸は、ビンが表す値を示すものではなく、整数でラベル付けされています。私の「最初の選択」は、実行した場合とまったく同じように x 軸にラベルを付けることです
data['values'].hist()
。私の「2番目の選択肢」は、x軸に「ビン名」のラベルを付けることですpd.cut(data['values'], 15)
。私のコードでは、labels=False
そうしないと、ビンのエッジ ラベルが (文字列として) バー ラベルとして使用され、これらがアルファベット順に配置され、グラフが基本的に役に立たなくなるため、使用しました。
これにアプローチする最良の方法は何ですか?これまで非常に不器用な関数を使用していたように感じます。