【matplotlib】step関数で階段状のグラフを作成する方法[Python]

  • URLをコピーしました!

matplotlib

前回、matplotlibのstairs関数でステップワイズグラフ(階段状のグラフ)を作成する方法を紹介しました。

今回はmatplotlibのstep関数で階段状のグラフを作成する方法を紹介します。

それでは始めていきましょう。

step関数の基本的な使い方

step関数を使って階段状のグラフを作成するにはXの値のリストとYの値のリストを準備します。

そして「plt.step(Xの値のリスト, Yの値のリスト)」とします。

import matplotlib.pyplot as plt

x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
y = [1.1, 2.3, 3.5, 4.3, 5.7, 6.1, 7.9, 8.2, 9.4, 10.5]

fig = plt.figure()
plt.clf()

plt.step(x, y)

plt.show()

実行結果

上の例ではXの値は昇順(数値が大きくなっていく順番)になっていますが、これが並んでいないと階段状のグラフになりません。

import matplotlib.pyplot as plt

x = [9, 0, 8, 1, 7, 2, 6, 3, 5, 4]
y = [1.1, 2.3, 3.5, 4.3, 5.7, 6.1, 7.9, 8.2, 9.4, 10.5]

fig = plt.figure()
plt.clf()

plt.step(x, y)

plt.show()

実行結果

ただし順に並んでいるのなら各要素の差が違っていたり、降順(数値が小さくなっていく順番)であっても問題ありません。

import matplotlib.pyplot as plt

x = [0, 1, 4, 9, 10, 14, 19, 20, 21, 24]
y = [1.1, 2.3, 3.5, 4.3, 5.7, 6.1, 7.9, 8.2, 9.4, 10.5]

fig = plt.figure()
plt.clf()

plt.step(x, y)

plt.show()

実行結果
import matplotlib.pyplot as plt

x = [24, 21, 20, 19, 14, 10, 9, 4, 1, 0]
y = [1.1, 2.3, 3.5, 4.3, 5.7, 6.1, 7.9, 8.2, 9.4, 10.5]

fig = plt.figure()
plt.clf()

plt.step(x, y)

plt.show()

実行結果

線・点のスタイル、色の変更

線・点のスタイル、色の変更を行うにはオプション引数として「fmt」を設定します。

ただし3番目の引数として設定されているため、引数の3つ目に配置する場合は「fmt」を省略することができます。

「fmt」は線・点のスタイル、色を一度に指定することができ、「fmt=”マーカーのスタイル 線のスタイル 色”」(実際は半角スペースは必要ありません)として指定します。

例えば「点を⚪︎」、「線を点線」、「色を赤」の場合は「o–r」となります。

import matplotlib.pyplot as plt

x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
y = [1.1, 2.3, 3.5, 4.3, 5.7, 6.1, 7.9, 8.2, 9.4, 10.5]

fig = plt.figure()
plt.clf()

plt.step(x, y, "o--r")

plt.show()

実行結果

使用できるマーカーの形状や線の形状、色はこちらのページで紹介されていますので、良かったらどうぞ。

値が変化する場所の指定

step関数では階段状のグラフのどこで値が変化するのかを指定することができます。

つまりXの値を見た時に、一つ前の値のところで変化する場合、その場で変化する場合、一つ後ろのところで変化する場合があり、「where」というオプション引数で指定することができます。

指定する値としては「pre」(一つ前で変化)、「mid」(その場で変化)、「post」(一つ後ろで変化)があります。

import matplotlib.pyplot as plt
import numpy as np

x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
y = [1.1, 2.3, 3.5, 4.3, 5.7, 6.1, 7.9, 8.2, 9.4, 10.5]

fig = plt.figure()
plt.clf()

plt.step(x, np.array(y) + 2.0, where="pre", label="pre")
plt.step(x, np.array(y) + 1.0, where="mid", label="mid")
plt.step(x, np.array(y) + 0.0, where="post", label="post")

plt.legend()
plt.show()

実行結果

ちなみに点を表示するとこんな感じになります。

import matplotlib.pyplot as plt
import numpy as np

x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
y = [1.1, 2.3, 3.5, 4.3, 5.7, 6.1, 7.9, 8.2, 9.4, 10.5]

fig = plt.figure()
plt.clf()

plt.step(x, np.array(y) + 2.0, "o-", where="pre", label="pre")
plt.step(x, np.array(y) + 1.0, "o-", where="mid", label="mid")
plt.step(x, np.array(y) + 0.0, "o-", where="post", label="post")

plt.legend()
plt.show()

実行結果

次回はNumPyのsinc関数を紹介します。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする