06.4.6
注目期間をハイライトする
ax.axvspan(start, end) で縦の帯を塗り、「この区間で何が起きたか」を線と同じ図の中で示す手法です。帯は alpha=0.2 程度の淡い色にして、折れ線より手前に出ないようにします。この章では 2024 年 4 月の 30 日分の日次セッション数に、4 月 10 日から 18 日のキャンペーン期間を黄色の帯で重ねます。読み終えると、日付軸の図に pd.Timestamp で区間を指定する方法と、帯を 1〜2 本に絞る理由、帯の色を線と離す理由が分かります。先に 複数ラインの推移比較 で ax.plot の基本を見ておくと、ここで足すのが背景の帯 1 本だけだと分かります。
直感 #
日次のセッション数を 30 日ぶん折れ線にすると、4 月中旬に山があるのは見えても、それが「キャンペーンを打った期間」と一致しているかどうかは、日付を数えなければ分かりません。そこで 4 月 10 日から 18 日の背景だけを淡い黄色で塗ります。線は何も変えていないのに、「帯の中で線が上がり、帯を出ると下がる」という対応が一目で読めるようになります。帯は説明のための背景なので、alpha=0.2 程度に抑えて線より目立たせないのが鉄則です。
何が起きているか(ステップで見る) #
コードを読む前に、この手法が図の上で何をしているかを追ってみましょう。「再生」を押すか、スライダーを動かすと 1 手順ずつ進みます。
見るポイント:折れ線でも軸の始点で印象が変わる。傾向を見たいなら移動平均を重ね、元データは薄く残す。
Python で描く #
次のコードは、2024 年 4 月 1 日から 30 日分の日付を pd.date_range で作り、平均 500 のポアソン乱数に 0 から 80 への上昇トレンドを足したセッション数を折れ線にします。その上で pd.Timestamp で区切った 4 月 10 日から 18 日の区間を ax.axvspan で塗っています。
| |

実行結果の読み方 #
紫の線は 500 前後で揺れながら 30 日かけて 80 ほど上がり、黄色の帯が 4 月 10 日から 18 日の 9 日間を示します。この例のデータはキャンペーンの効果を含めずに作っているので、帯の中で線が特別に跳ねるわけではありません。実データで同じ図を描いたとき、帯の中だけ線が上に外れていればキャンペーンの効果、帯を出ても高いままなら効果の持続、帯の中でも変化がなければ効果なし、と読み分けます。
使いどころと落とし穴 #
この手法が向くのは、キャンペーン期間や繁忙期、システム障害の期間のように「開始日と終了日が決まっている出来事」と折れ線の動きを対応させたい場面です。効果を数値で比べたいなら axvspan の図だけでは足りません。帯の中と外の平均を sessions[mask].mean() で計算して本文に書くか、ダイバージングバーで差を描きます。落とし穴の 1 つ目は帯の本数です。3 本も 4 本も塗るとどこが重要か分からなくなるため、本当に見せたい 1〜2 区間に絞ります。2 つ目は色で、線と同じ紫系で帯を塗ると区間の境界が線に溶けるので、線と色相の離れた淡い色を alpha 0.2 前後で使います。帯に ax.annotate でイベント名を添えておくと、図がそのまま分析メモになります。
- 複数ラインの推移比較 — 複数系列を同一軸で比較
- 予測区間バンド — 予測値と信頼区間を帯で表現
- 二軸グラフ — 単位の異なる2指標を同時に表示