matplotlib.pyplot.contour/contourf – 等高線

contour~コンターライン

matplotlib.pyplot.contour()は2次元平面上のコンター(等値線)を描く。x, yの値から計算されたzの値が等しい点を曲線で結ぶ。

x, y, zの指定方法

引数がzのみの場合

以下のコードでは、zの値のみを2次元配列で与えている。この場合は、配列zのインデックスの値が座標値となる(行番号0~20がy座標、列番号0~16がx座標)。

引数に1次元のx, yを指定

以下のコードでは、x, yを1次元配列で引数として渡している。この場合は、x, yの値が座標値として用いられる(x座標が-1~1、y座標が-1.2~1.2)。

meshgridを使う方法

最も一般的な方法。x, yの1次元配列からnumpy.meshgrid()メソッドでそれぞれの2次元配列を生成し、それらを使ってzを計算するとともに、contour()の引数に与える。結果は上と同じになる。

ラベル

コンターの値をラベル表示させる。手順としては、contour()で描画した際の戻り値のオブジェクトを保存しておき、それをclabel()の引数として与える。

コンターレベル

コンターの数をlevelsで指定する。数値で指定する方法と、配列等で指定する方法があるが、数値で指定する方法は条件によって期待した結果にならないことがある。

数値による指定

1つの整数値で指定する場合、ドキュメンテーションでは以下のように書かれている。

“If an int n, use n data intervals; i.e. draw n+1 contour lines. The level heights are automatically chosen.”

すなわち、n個の間隔に対してn+1本のコンターが描かれることになっている。

以下のコードを実行してみる。

範囲と関数の関係によって、同じlevels=5を指定しているのにコンターの本数が異なる。ドキュメント通りなら、5つの間隔に対して6本のコンターが描かれるはずだが、左は6つの間隔に対して5本、右は5つの間隔に対して4本。

右の図の場合は左下でz2 = 0、右上でz2 = 4となり、コーナーの点がコンターに含まれているとすると勘定は合う。左はこれが合わないが、桁落ちなのかゼロが含まれるときに挙動が違うのか、よくわからない。

以下のようにlevels=1とした場合も、挙動が一定しない。

配列等による指定

levelsをリストなどで指定すると、その要素で指定された値のコンターを描く。要素は昇順でなければならない(昇順でない場合は実行時エラー)。

線のデザイン

linewidths~線の太さ

線の太さはlinewidthsで指定する。1つの数値で指定した場合は全てのコンターラインに適用、配列等で指定した場合は、サイクリックにその太さが適用される。赤字で示したように、引数名の最後に”s”が着く点に注意。

linestyles~線のスタイル

linestilesで、線のスタイルをスタイル名で指定する。複数指定した場合はサイクリックに適用される。

なお、線の色に単色を用いた場合は、負の値のコンターラインが破線('dashed')で描かれるが、この例は次のcolorsのところで示す。

colors~線の色

コンターラインの色はcolorsで指定する。配列等で指定するのが標準だが、単色の場合は配列化せず色名のみで指定可能。ただしその場合は、red, blue等の色名による指定方法のみ。

単色指定の場合、負の値に対するコンターは破線となる。

If linestyles is None, the default is ‘solid’ unless the lines are monochrome. In that case, negative contours will take their linestyle  fromrcParams["contour.negative_linestyle"] = 'dashed' setting.

cmap~カラーマップ

線の色にcolormapを適用できる。

alpha~透過度

線によるコンターではあまり意味がないが、線の透過度を0 ~1の実数で指定できる。

contourf~色付きのコンターエリア

contourfはコンターラインで区切られた各エリアを色付けする。

ラベル

contourfでラベルを付けることはあまり想定されないが、contourと同じようにすると図が崩れてしまう。contourcontourfの合わせ技がよい。

デザイン

cmap~カラーマップ

コンターエリアの色分けにカラーマップを指定できる。

 

alpha~透過度

透過度を1未満に設定して、透過させることができる。

 

ndarray – 条件式による要素の取り出し

基本形

ndarrayの要素に以下のような条件式を指定すると、条件に適合した要素を取り出せる。

これは次のような仕組みになっている。

まず配列の要素として、要素数と同数の論理値(True/False)を格納した配列を指定すると、Trueに対応した要素のみを要素とする配列が返される。

一方、配列全体を条件式とすると、各要素について条件判定を行った結果(True/False)を要素とする配列が返される。

したがって、配列の要素に配列全体の条件式を適用すると、その条件判定がTrueとなる要素からなる配列が返される。

別配列の条件による取り出し

条件に合う行の取り出し

上記の応用で、以下のように配列aの要素を配列bの条件により取り出すことができる。

この方法は、元データからクラス分類に応じたデータのみを取り出すときなどに使える。

たとえば以下は、5組の座標値のセットXから、クラスyが1となる座標値のサブセットを取り出すイメージ。

条件に合う列の取り出し

条件に適合した列のみ取り出す場合には、少し工夫が必要で、内包表記と条件指定を組み合わせる。

以下の例では、配列yで抽出したい列を1としていて、内包表記で配列を取り出す際にこれを利用している。