K_DM Book
用語集
対象者 標準
対象者別の入口 →

対象者の設定はこのブラウザの中にだけ保存されます。

言語 JA

ステップラインで区切りのある変化を表す

入門

06.4.5

ステップラインで区切りのある変化を表す

最終更新 2020-03-25 読了時間 2 分
まとめ
ステップチャートは、料金やステータスのように「ある時点で切り替わり、次の切り替えまで同じ値が続く」データを、斜めの線ではなく水平線と垂直線の階段で描く図です。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 段の高さの違いが読めるようにしています。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import matplotlib.pyplot as plt

months = ["Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct"]
price = [980, 980, 1100, 1100, 1250, 1250, 1350]

fig, ax = plt.subplots(figsize=(6, 4))
ax.step(months, price, where="post", color="#0ea5e9", linewidth=2.5)

ax.set_ylabel("料金(円)")
ax.set_title("プラン料金の改定推移")
ax.set_ylim(900, 1400)
ax.grid(alpha=0.3)

fig.tight_layout()

plt.show()

plt.step を使うと階段状の線を描けますの図

実行結果の読み方 #

水色の線は 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 に戻します。