matplotlib
前回、NumPyでリストの要素を任意の最大値・最小値内の数値に丸めるclipという関数を紹介しました。

今回はmatplotlibでイベントの発生を線で可視化するイベントプロット(イベントプロット)を紹介します。
それでは始めていきましょう。
イベントプロットの使い方の基本
まずイベントプロットを使うには1次元のデータを用意する必要があります。
そこで今回はNumPyのランダムジェネレータを使い、10個の乱数を取得しました。
NumPyのランダムジェネレータの使い方はこちらの記事で紹介していますので、良かったらどうぞ。

import numpy as np
import matplotlib.pyplot as plt
sample_num = 10
rng = np.random.default_rng(0)
data = [rng.integers(20) for _ in range(sample_num)]
print(data)
実行結果
[17, 12, 10, 5, 6, 0, 1, 0, 3, 16]
この数値のリストを使って、「plt.eventplot(数値のリスト)」とするとイベントプロットを作成することができます。
import numpy as np
import matplotlib.pyplot as plt
sample_num = 10
rng = np.random.default_rng(0)
data = [rng.integers(20) for _ in range(sample_num)]
plt.eventplot(data)
plt.show()
実行結果

複数のイベントプロットを一度に表示する場合は、それぞれの数値のリストをさらにリストに格納した二次元リストを使うことで表示できます。
import numpy as np
import matplotlib.pyplot as plt
data_num = 5
sample_num = 10
rng = np.random.default_rng(0)
data1 = [rng.integers(20) for _ in range(sample_num)]
data2 = [rng.integers(20) for _ in range(sample_num)]
data3 = [rng.integers(20) for _ in range(sample_num)]
data4 = [rng.integers(20) for _ in range(sample_num)]
data5 = [rng.integers(20) for _ in range(sample_num)]
data = [data1, data2, data3, data4, data5]
plt.eventplot(data)
plt.show()
実行結果

ちなみにリスト内包表記を用いて複数のイベントプロット用のデータを作成するとこんな感じです。
import numpy as np
import matplotlib.pyplot as plt
data_num = 5
sample_num = 10
rng = np.random.default_rng(0)
data = [[rng.integers(20) for _ in range(sample_num)] for _ in range(data_num)]
plt.eventplot(data)
plt.show()
実行結果

線の色の変更
線の色を変更するにはplt.eventplotのオプション引数に「colors=色」を追加します。
import numpy as np
import matplotlib.pyplot as plt
sample_num = 10
rng = np.random.default_rng(0)
data = [rng.integers(20) for _ in range(sample_num)]
plt.eventplot(data, colors="tab:red")
plt.show()
実行結果

複数のデータがある場合は「colors=色のリスト」とします。
import numpy as np
import matplotlib.pyplot as plt
data_num = 5
sample_num = 10
colors = ["tab:blue", "tab:orange", "tab:green", "tab:red", "tab:purple"]
rng = np.random.default_rng(0)
data = [[rng.integers(20) for _ in range(sample_num)] for _ in range(data_num)]
plt.eventplot(data, colors=colors)
plt.show()
実行結果

線の種類の変更
線の種類を変更するには「linestyles=線の種類」、データが複数の場合は「linestyles=線の種類のリスト」とします。
使用できる線の種類は「-」、「–」「-.」「:」「solid」が使用できます。
import numpy as np
import matplotlib.pyplot as plt
data_num = 5
sample_num = 10
linestyles = ['-', '--', '-.', ':', "solid"]
rng = np.random.default_rng(0)
data = [[rng.integers(20) for _ in range(sample_num)] for _ in range(data_num)]
plt.eventplot(data, linestyles=linestyles)
plt.show()
実行結果

イベントの方向の変更
イベントの方向はデフォルトでは横方向です。
これを縦方向に変える場合はplt.eventplotのオプション引数に「orientation=”vertical”」を追加します。
import numpy as np
import matplotlib.pyplot as plt
data_num = 5
sample_num = 10
colors = ["tab:blue", "tab:orange", "tab:green", "tab:red", "tab:purple"]
rng = np.random.default_rng(0)
data = [[rng.integers(20) for _ in range(sample_num)] for _ in range(data_num)]
plt.eventplot(data, colors=colors, orientation="vertical")
plt.show()
実行結果

イベントプロットの位置の変更
イベントプロットの位置を変更するにはplt.eventplotのオプション引数として「lineoffset」、もしくは「lineoffsets」を追加します。
複数のデータを含んでいるイベントプロットに対し、「lineoffset=数値」とすると全てのデータの位置が指定した数値の位置となります。
import numpy as np
import matplotlib.pyplot as plt
data_num = 5
sample_num = 10
colors = ["tab:blue", "tab:orange", "tab:green", "tab:red", "tab:purple"]
rng = np.random.default_rng(0)
data = [[rng.integers(20) for _ in range(sample_num)] for _ in range(data_num)]
plt.eventplot(data, colors=colors, lineoffset=2)
plt.show()
実行結果

「lineoffsets=数値」とすると指定した数値の間隔を開けた位置にデータが表示されます。
import numpy as np
import matplotlib.pyplot as plt
data_num = 5
sample_num = 10
colors = ["tab:blue", "tab:orange", "tab:green", "tab:red", "tab:purple"]
rng = np.random.default_rng(0)
data = [[rng.integers(20) for _ in range(sample_num)] for _ in range(data_num)]
plt.eventplot(data, colors=colors, lineoffsets=2)
plt.show()
実行結果

「lineoffsets=数値のリスト」とするとそれぞれ指定した位置にデータが表示されます。
import numpy as np
import matplotlib.pyplot as plt
data_num = 5
sample_num = 10
colors = ["tab:blue", "tab:orange", "tab:green", "tab:red", "tab:purple"]
rng = np.random.default_rng(0)
data = [[rng.integers(20) for _ in range(sample_num)] for _ in range(data_num)]
plt.eventplot(data, colors=colors, lineoffsets=[1, 3, 6, 10, 15])
plt.show()
実行結果

線の長さの変更
線の長さを変更するにはplt.eventplotのオプション引数として「linelength」、もしくは「linelengths」を追加します。
「linelength=数値」と「linelengths=数値」の差はよく分かりませんが、「linelengths=数値」だと上下に余白がプラスアルファされる様です。
import numpy as np
import matplotlib.pyplot as plt
data_num = 5
sample_num = 10
colors = ["tab:blue", "tab:orange", "tab:green", "tab:red", "tab:purple"]
linelengths = [0.5, 1, 1.5, 2, 2.5]
rng = np.random.default_rng(0)
data = [[rng.integers(20) for _ in range(sample_num)] for _ in range(data_num)]
plt.eventplot(data, colors=colors, linelength=2)
plt.show()
実行結果

import numpy as np
import matplotlib.pyplot as plt
data_num = 5
sample_num = 10
colors = ["tab:blue", "tab:orange", "tab:green", "tab:red", "tab:purple"]
linelengths = [0.5, 1, 1.5, 2, 2.5]
rng = np.random.default_rng(0)
data = [[rng.integers(20) for _ in range(sample_num)] for _ in range(data_num)]
plt.eventplot(data, colors=colors, linelengths=2)
plt.show()
実行結果

また「linelengths=数値のリスト」とするとそれぞれのデータの線の長さを変えることができます。
import numpy as np
import matplotlib.pyplot as plt
data_num = 5
sample_num = 10
colors = ["tab:blue", "tab:orange", "tab:green", "tab:red", "tab:purple"]
rng = np.random.default_rng(0)
data = [[rng.integers(20) for _ in range(sample_num)] for _ in range(data_num)]
plt.eventplot(data, colors=colors, linelengths=[0.5, 1, 1.5, 2, 2.5])
plt.show()
実行結果

線の太さの変更
線の太さを変更するにはplt.eventplotのオプション引数として「linewidth」、もしくは「linewidths」を追加します。
「linewidth=数値」と「linewidths=数値」の場合は結果は同じで全てのデータで同一の太さとなります。
import numpy as np
import matplotlib.pyplot as plt
data_num = 5
sample_num = 10
colors = ["tab:blue", "tab:orange", "tab:green", "tab:red", "tab:purple"]
rng = np.random.default_rng(0)
data = [[rng.integers(20) for _ in range(sample_num)] for _ in range(data_num)]
plt.eventplot(data, colors=colors, linewidth=3)
plt.show()
実行結果

import numpy as np
import matplotlib.pyplot as plt
data_num = 5
sample_num = 10
colors = ["tab:blue", "tab:orange", "tab:green", "tab:red", "tab:purple"]
rng = np.random.default_rng(0)
data = [[rng.integers(20) for _ in range(sample_num)] for _ in range(data_num)]
plt.eventplot(data, colors=colors, linewidths=3)
plt.show()
実行結果

「linewidths=数値のリスト」とするとそれぞれのデータで線の太さを変えることができます。
import numpy as np
import matplotlib.pyplot as plt
data_num = 5
sample_num = 10
colors = ["tab:blue", "tab:orange", "tab:green", "tab:red", "tab:purple"]
rng = np.random.default_rng(0)
data = [[rng.integers(20) for _ in range(sample_num)] for _ in range(data_num)]
plt.eventplot(data, colors=colors, linewidths=[0.5, 1, 1.5, 2, 2.5])
plt.show()
実行結果

次回はmatplotlibで等高線図を表示する方法(plt.contour)を紹介します。
ではでは今回はこんな感じで。
コメント