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未満に設定して、透過させることができる。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です