06.4.5
ステップラインで区切りのある変化を表す
ax.step(months, price, where="post") の where が、値が変わるタイミングを区間の先頭("post")に置くか末尾("pre")に置くかを決めます。この章では 980 円から 1,350 円へ 3 回改定されたプラン料金を 7 か月ぶん描き、通常の ax.plot では「5 月に 1,040 円だった」と誤読される問題を階段で解消します。読み終えると、連続データと離散データのどちらに階段を使うべきかと、where の 3 つの値の違いを判断できるようになります。先に 複数ラインの推移比較 で斜めにつなぐ通常の折れ線を見ておくと、階段にすると何が正確になるかが比べやすくなります。
直感 #
料金が 980 円から 1,350 円へ 3 回改定されたとします。これを通常の折れ線で描くと、4 月の 980 と 6 月の 1,100 が斜めの線で結ばれ、「5 月は 1,040 円だった」ように見えます。実際には 5 月はまだ 980 円のままで、6 月の初日に一気に 1,100 円へ跳ねたのです。ステップチャートは値が変わるまで水平線を引き、変わる瞬間に垂直線で跳ぶので、「いつ、いくらから、いくらへ」が線の形そのままに読めます。
Python で描く #
次のコードは、4 月から 10 月の 7 か月の料金を price に入れ、ax.step の where="post" で「その月から次の改定まで同じ値」として階段を描きます。Y 軸は 900〜1,400 円に固定し、3 段の高さの違いが読めるようにしています。
| |

実行結果の読み方 #
水色の線は 4 月から 5 月まで 980 円の水平線、6 月の位置で 1,100 円へ垂直に跳ね、8 月に 1,250 円、10 月に 1,350 円と 3 段の階段になります。各段の水平部分の長さが「その料金が何か月続いたか」で、980 円と 1,100 円と 1,250 円がそれぞれ 2 か月ずつ続いたことが線の長さから読めます。垂直線の位置が改定月です。その月の途中の値は存在しないため、通常の折れ線で生じる「5 月は 1,040 円」のような誤読が起きません。
使いどころと落とし穴 #
ステップチャートが向くのは、料金プラン、在庫の有無、契約ステータス、金利のように、値が離散的に切り替わって次の切り替えまで一定のデータです。水平区間が多い図では、垂直線の脇に ax.annotate("値上げ", ...) で改定理由を添えると、線の形と出来事が結びつきます。落とし穴の 1 つ目は where の選び間違いで、「変化した時点から有効」なら "post"、「次の変化まで前の値が有効」で記録時点が区間の末尾なら "pre" と、データの意味に合わせて選ばないと改定月が 1 か月ずれて見えます。2 つ目は連続データへの誤用で、日々なだらかに変わる気温や売上に ax.step を使うと不自然な階段になってトレンドが読みにくくなるので、その場合は通常の ax.plot に戻します。
- 複数ラインの推移比較 — 複数系列を同一軸で比較
- 二軸グラフ — 単位の異なる2指標を同時に表示
- 注目期間ハイライト — 特定期間を背景色で強調