06.4.2
積み上げエリアチャート
ax.stackplot(hours, tablet, mobile, pc) のように渡した順番がそのまま積む順番になり、下に置いた系列ほど値を正確に読めます。この章では 0 時から 24 時までの PV をデバイス別に積み上げ、合計が最大になる 16 時と、その時点でスマホが占める割合を 1 枚で読みます。読み終えると、積む順番の決め方、alpha と colors の選び方、負の値を含むデータや割合表示が必要なときの切り替え方を判断できるようになります。先に 複数ラインの推移比較 で ax.plot を重ねる描き方を見ておくと、「面で積むと何が変わるか」が比べやすくなります。
直感 #
1 日のアクセスを 4 時間ごとに集計すると、PC は 120 から 240、スマホは 200 から 300、タブレットは 80 から 180 へと、どれも昼過ぎから夕方にかけて増えます。3 本の折れ線で描けば個々の増減は追えますが、「全部でいくつか」「スマホは全体の何割か」は足し算しないと分かりません。積み上げエリアチャートは、いちばん下にタブレット、その上にスマホ、さらに上に PC と面を重ねるので、最上段の線が合計 PV、帯の厚さがそのデバイスの PV になります。16 時に合計が 700 まで膨らみ、そのうちスマホの帯が 280 を占める、という読み方を足し算なしでできるのがこの図の価値です。
Python で描く #
次のコードは、0 時から 24 時まで 4 時間おきの 7 時点の PV を 3 つの配列で用意し、ax.stackplot でタブレット・スマホ・PC の順に積み上げます。X 軸は 0〜24 に固定し、目盛りは観測した 7 時点だけに絞っています。
| |

実行結果の読み方 #
最上段の輪郭は 0 時の合計 400 から 16 時の 700 まで上がり、20 時に 690、24 時に 580 へ下がります。16 時の断面を縦に読むと、下からタブレット 180、スマホ 280、PC 240 で、スマホの帯が最も厚い時間帯です。最下段のタブレットは下端が常に 0 なので値を直接読めますが、最上段の PC は下端も上端も動くため、「PC だけが増えたのか、下の 2 つが増えて押し上げられたのか」は帯の厚さを目で測るしかありません。PC 単独の増減を正確に比べたいときは 複数ラインの推移比較 の折れ線に戻します。
使いどころと落とし穴 #
積み上げエリアチャートが向くのは、PC・スマホ・タブレットのように「内訳の合計」に意味があり、その合計と構成比の推移を同時に伝えたい場面です。構成比そのものを比べたいなら、各系列を pc + mobile + tablet で割って 0〜1 の割合にしてから stackplot に渡すと、常に合計 100% の帯になります。落とし穴は 2 つあります。1 つ目は積む順番で、16 時に 300 まで跳ねるスマホのような変動の大きい系列を下に置くと、その上に乗る帯がすべて一緒に揺れて読めなくなるので、安定した系列を下に置きます。2 つ目は負の値で、返金や在庫の減少のように負になる系列があると面が重なって意味が壊れるため、stackplot に渡す前に (pc < 0).any() のような確認を入れます。
- 積み上げ棒グラフ — 全体量と内訳を同時に表示
- 複数ラインの推移比較 — 複数系列を同一軸で比較
- ストリームグラフ — 構成比の推移を上下対称の波で表現