matplotlibで順位推移を表すグラフを書きたい

タイムラインチャートやランクチャート、スロープチャートなど、順位の推移を表したい時使うグラフです。

f:id:esu-ko:20200908211929p:plain

散布図と線の組み合わせでかけそうです。

書いてみる

データを用意します。

例えば、行がチーム、1列目が一つ前の順位、2列目が今季の順位とします。

import matplotlib.pyplot as plt
import numpy as np

data = np.array([
        [1,2],
        [2,1],
        [3,5],
        [4,4],
        [5,3]
])

描画します。 (上にはったグラフになります)

散布図も折れ線も一つ目の引数がx座標、二つ目がy座標になります。(線の場合は、xとyの組み合わせを順につないでいきます)

今回は色を変えたいので順にループします。

一点、普通に描画すると、左下を原点にスタートするので、set_ylimでy座標を逆にしています。(順位は小さい数値が、高いことを表現したいため)

#(0,0)が左上になるように準備
fig, ax = plt.subplots()
min_v = data.min() - 1
max_v = data.max() + 1
ax.set_ylim([max_v,min_v])

# 描画
for d in data:
  ax.scatter([1,2],[d[0],d[1]])
  ax.plot([1,2],[d[0],d[1]])