前回の記事は、関数と関数に挟まれた領域に色をつける方法を勉強しました。
今回は、グラフを描写する際、空白とした部分にプロット点や線が描写されないようにする方法を勉強します。

綺麗な図が描けました:D
おそらくこの記事を見ている人は、こういうことがしたいんじゃないですよね。
np.ma.masked_whereという関数を使えば、値を「隠す(マスクする)」ことになり、プロットする際も、特定の値領域を飛ばしてくれます。
また、これを機に「0」と「値定義なし」と「NaN」の違いを何となく知れば、より強みになります。
これを知らないと、何時間も悩んでしまいそうですよね。
知っていれば、簡単ですね。覚えておくと、何かと便利かもしれません◎
綺麗にできたので、この図もInstagramに投稿しようと思います:)
ただ値を消すだけではダメ。masked_whereで値領域をマスク(隠す)する
それでは早速ソースコードです。1行1行解説を加えています。説明を省けば、10行以内に収まるくらい簡単ですよ:) ただ今回は、馴染みのない関数が出てくるので、一緒に覚えましょう。これを出力すると、以下の図になります。import matplotlib.pyplot as plt import numpy as np x = np.linspace(-np.pi/2, np.pi/2, 31) #x軸:-1/2piから1/2piを31分割 y = np.cos(x)**3 #描写する関数:cosθの3乗 # 1) remove points where y > 0.7(ブルーのプロット) x2 = x[y <= 0.7] #yが0.7以上の値を削除(0.7以下のみx2とする) y2 = y[y <= 0.7] #yが0.7以上の値を削除(0.7以下のみy2とする) # 2) mask points where y > 0.7(オレンジのプロット) y3 = np.ma.masked_where(y > 0.7, y) #(条件式, 適用する値) # masked_where関数:yの値が0.7以上のyの値を"非表示"にする関数 # 3) set to NaN where y > 0.7(グリーンのプロット) y4 = y.copy() #yの関数を丸々コピー y4[y4 > 0.7] = np.nan #yの値が0.7以上のyの値を"削除"する #nan関数:”値がない”という意味。"0"や"空っぽ"とは違う。 #値を削除して”空っぽ”とした場合は、ブルーのプロットになる。 #コサインの波長を0.1〜1.0に変えて、4つのグラフをプロット plt.plot(x*0.1, y, 'o-', color='grey', label='No mask') plt.plot(x2*0.4, y2, 'o-', color='blue', label='Points removed') plt.plot(x*0.7, y3, 'o-', color='orange', label='Masked values') plt.plot(x*1.0, y4, 'o-', color='green', label='NaN values') plt.legend() plt.savefig("logo16.png") plt.show()

綺麗な図が描けました:D
numpyのmasked_whereで値を「隠す」ことを知っておこう。
プロットしたくないからと言って、何も考えずプロットしたくない値を削除してしまうと、ブルーのプロットのように、削除した次の値に線が繋がれてしまいます。おそらくこの記事を見ている人は、こういうことがしたいんじゃないですよね。
np.ma.masked_whereという関数を使えば、値を「隠す(マスクする)」ことになり、プロットする際も、特定の値領域を飛ばしてくれます。
また、これを機に「0」と「値定義なし」と「NaN」の違いを何となく知れば、より強みになります。
これを知らないと、何時間も悩んでしまいそうですよね。
知っていれば、簡単ですね。覚えておくと、何かと便利かもしれません◎
綺麗にできたので、この図もInstagramに投稿しようと思います:)