matplotlib
今回はMatplotlibでグラフ表示する際、特定の範囲に背景色を設定する方法を試していきます。
例えばこんな感じで正常範囲、注意範囲、危険範囲をわかりやすくするために使えます。
まずは基本となるプログラムですが、今回はRandom関数を使ってこんな感じに作ってみました。
import matplotlib.pyplot as plt
import random
data_points = 10
x_val = [i for i in range(data_points)]
y_val = [random.randrange(10) for _ in range(data_points)]
fig=plt.figure()
plt.clf()
plt.plot(x_val, y_val)
plt.xlim(-1, 10)
plt.ylim(0, 10)
plt.show()
実行結果
それでは始めていきましょう。
水平方向の範囲に背景色を設定:axhspan
まずは水平方向、つまりY軸方向の特定の範囲に背景色を設定してみます。
その場合は「axhspan(最小値, 最大値, color=’色’)」を用います。
import matplotlib.pyplot as plt
import random
data_points = 10
x_val = [i for i in range(data_points)]
y_val = [random.randrange(10) for _ in range(data_points)]
fig=plt.figure()
plt.clf()
plt.plot(x_val, y_val)
plt.axhspan(0, 5, color='red')
plt.xlim(-1, 10)
plt.ylim(0, 10)
plt.show()
実行結果
水平方向の特定範囲に色が塗られましたが、このままでは色が強すぎます。
その場合は「alpha」のオプションを追加することで透過させ、色を弱めることができます。
import matplotlib.pyplot as plt
import random
data_points = 10
x_val = [i for i in range(data_points)]
y_val = [random.randrange(10) for _ in range(data_points)]
fig=plt.figure()
plt.clf()
plt.plot(x_val, y_val)
plt.axhspan(0, 5, color='red', alpha=0.1)
plt.xlim(-1, 10)
plt.ylim(0, 10)
plt.show()
実行結果
垂直方向の特定の範囲に背景色を設定:axvspan
まずは垂直方向、つまりX軸方向の特定の範囲に背景色を設定してみます。
その場合は「axhspan(最小値, 最大値, color=’色’, alpha=透過率)」を用います。
import matplotlib.pyplot as plt
import random
data_points = 10
x_val = [i for i in range(data_points)]
y_val = [random.randrange(10) for _ in range(data_points)]
fig=plt.figure()
plt.clf()
plt.plot(x_val, y_val)
plt.axvspan(0, 5, color='blue', alpha=0.1)
plt.xlim(-1, 10)
plt.ylim(0, 10)
plt.show()
実行結果
axhspan、axvspanの両方を設定した場合
axhspan、axvspanの両方を設定すると両方の背景が別個に塗りつぶされます。
そして重なった部分はそれぞれの色が混ざった色となります。
import matplotlib.pyplot as plt
import random
data_points = 10
x_val = [i for i in range(data_points)]
y_val = [random.randrange(10) for _ in range(data_points)]
fig=plt.figure()
plt.clf()
plt.plot(x_val, y_val)
plt.axhspan(0, 5, color='red', alpha=0.1)
plt.axvspan(0, 5, color='blue', alpha=0.1)
plt.xlim(-1, 10)
plt.ylim(0, 10)
plt.show()
実行結果
特定の領域だけ塗りつぶす方法
先ほどまでは水平方向、垂直方向どちらかだけを選択し、その範囲の背景色を設定していました。
次は水平方向、垂直方向の両方において特定の範囲、つまりグラフ上の特定の領域だけ塗りつぶす方法を試してみましょう。
その場合は「axhspan」、「axvspan」のどちらでもできるのですが、その引数の設定に注意が必要です。
axhspanの場合、「axhspan(Y軸方向の最小値, Y軸方向の最大値, X軸方向の最小の比率, X軸方向の最大の比率, color=’色’, alpha=透過率)」となります。
import matplotlib.pyplot as plt
import random
data_points = 10
x_val = [i for i in range(data_points)]
y_val = [random.randrange(10) for _ in range(data_points)]
fig=plt.figure()
plt.clf()
plt.plot(x_val, y_val)
plt.axhspan(0, 5, 0, 0.5, color='red', alpha=0.1)
plt.xlim(-1, 10)
plt.ylim(0, 10)
plt.show()
実行結果
axvspanの場合、「axvspan(X軸方向の最小値, X軸方向の最大値, Y軸方向の最小の比率, Y軸方向の最大の比率, color=’色’, alpha=透過率)」となります。
import matplotlib.pyplot as plt
import random
data_points = 10
x_val = [i for i in range(data_points)]
y_val = [random.randrange(10) for _ in range(data_points)]
fig=plt.figure()
plt.clf()
plt.plot(x_val, y_val)
plt.axvspan(0, 5, 0, 0.5, color='blue', alpha=0.1)
plt.xlim(-1, 10)
plt.ylim(0, 10)
plt.show()
実行結果
axhspanでもaxvspanでも最初の2つはその方向の「数値」ですが、その次の2つは「比率」なので、最小の位置を0、最大の位置を1と換算して値を入力する必要があります。
何はともあれ水平方向、垂直方向、特定の領域に背景色を設定できました。
ではでは今回はこんな感じで。
コメント