matplotlib – markers~マーカースタイル

グラフ表示などで使えるマーカーの種類は以下の通り。

スタイル指定は以下の通り。

“.” point
“,” pixel
“o” circle
“v” triangle_down
“^” triangle_up
“<“ triangle_left
“>” triangle_right
“1” tri_down 下向き三又
“2” tri_up 上向き三又
“3” tri_left 左向き三又
“4” tri_right 右向き三又
“8” octagon
“s” square
“p” pentagon
“*” star
“h” hexagon1
“H” hexagon2
“+” plus
“x” x ×
“D” diamond
“d” thin_diamond
“|” vline
“_” hline
“P” plus_filled
“X” x_filled
0 tickleft
1 tickright
2 tickup
3 tickdown
4 caretleft
5 caretright
6 caretup
7 caretdown
8 caretleftbase 中心ベース左キャレット
9 caretrightbase 中心ベース右キャレット
10  caretupbase 中心ベース上キャレット
11  caretdownbase 中心ベース下キャレット
“None” マーカーなし
None マーカーなし ●が表示
” “ マーカーなし
“” マーカーなし

 

Python3 – 条件式によるコレクションの要素の抽出

リストからの要素の抽出

リストから条件に合う要素だけを取り出し、リストとして返す。

一部要素がNoneを含む場合にスキップ。

辞書からの要素の抽出

辞書から条件に合うキーあるいは値を探し、条件に合う要素のみの辞書として返す。

キーあるいは値がNoneの場合にスキップ。

参考:numpy.ndarrayの要素の抽出

numpy.ndarrayの要素の抽出は以下の手順で。

  • ndarrayに条件式を適用すると、各要素の条件への適合/不適合に対応したTrue/Falseを要素とするndarrayが生成される
  • ndarrayの要素にTrue/Falseを要素とするndarrayを適用すると、Trueに対応する要素だけで構成されるndarrayが生成される
  • これらをまとめて、ndarray[ndarrayの条件式]として、条件式にあう要素のみのndarrayが得られる

より詳細にはndarray – 条件式による要素の取り出しを参照。

 

mplot3d.Axes3D – 3次元グラフの概要

概要

Pythonのライブラリーを使った3次元グラフ表示の概要をまとめる。大きな流れは以下の通り。

Axes3Dオブジェクトの生成で以下のようにしている例もあるが、古いバージョンのものであり、matplotlibのチュートリアルでは上記の方法を推奨している。

なお、FigureオブジェクトとAxes3Dオブジェクトを1行で生成する方法がこちらに紹介されている。この方法だと1行ですみ、複数のAxes3Dを一度に生成できる。

各種描画処理

scatter~点の表示

2次元のscatterと同じで、x, y, zの3次元の座標を配列で指定。以下の例では立方体の8つの頂点を3次元空間内に表示する。

このコードの概要は以下の通り。

  1. 8つの頂点の座標の準備
    • x, y, zの座標ごとに配列で準備
  2. figureオブジェクトの取得
  3. axesオブジェクトの取得
  4. x,y,z軸の範囲を設定
    • 3次元用のメソッドaxes.set_xlim3d(min, max)などで指定
  5. 点の表示
    • axes.scatter(x, y, z)と3次元座標で指定

なお、上記の表示結果はマウスでドラッグして回転することができる。

plot~曲線の表示

Axes3D.plot(x, y, z)によって、3次元空間内に曲線を描く。

以下の例は、パラメータ表示された以下の曲線を描いている。

(1)    \begin{align*} x = t \cos t,\quad y = t \sin t,\quad z = t \qquad (0 \le t \le 8 \pi) \end{align*}

plot_wireframe/plot_sufrace~曲面の表示

meshgrideで生成した座標面に対するf(x, y)の位置を使って、3次元の曲面を描く。plot_wireframeはワイヤーフレーム、plot_surfaceはワイヤーフレームの中の面が塗りつぶされる。以下の例では、z = x2 + y2の関数の形状を、ワイヤーフレームと曲面で描く。

このコードの概要は以下の通り。

  1. 表示させる放物面の準備
    1. x,yの軸座標を生成
    2. numpy.meshgrid()関数で全格子点の座標を生成
    3. 格子点座標に対するzの値を計算
  2. x,y軸の軸目盛をhticksz軸の軸目盛をvticksとして準備
  3. figureの生成
  4. axesの1つ目を生成し、ワイヤーフレーム表示
    1. x,y,z軸の軸目盛をaxes.set_xticks()などのメソッドで設定
    2. ワイヤーフレームの描画ax1.plot_wireframe(x, y, z)
  5. axesの2つ目を生成し、曲面表示
    1. x,y,z軸の軸目盛をaxes.set_xticks()などのメソッドで設定
    2. 曲面の描画ax1.plot_surface(x, y, z)

コンターの表示

指定したz座標の位置に、f(x, y)のコンターを描く。以下の例では、z = x2 + y2の関数の曲面を描き、z=0の面にコンターを描く。

このコードの手順は上の曲面の表示とほぼ同じで、上記と異なる点は以下の通り。

  • 2つの関数のコンターを比べるのに、xy平面上の点の原点からのL2ノルムとL1ノルムを使っている。
  • axes.contour()関数でコンターを描画している。
    • contour(x, y, z, offset)offsetは、コンターを表示する平面のzの値で指定

 

numpy – meshgridの概要

格子の生成

3次元グラフの描画にも使われるnumpy.meshgrid()の動作の概要をまとめる。indexingsparseといった引数については、別の機会に。

x, yがとる範囲を与えると、全格子点の座標が生成される。xが列、yが行を表すカウンターとみると、その内容は以下のようになる。

y|x -2 -1 0 1 2
-1 (-2, -1) (-1, -1) (0, -1) (1, -1) (2, -1)
0 (-2, 0) (-1, 0) (0, 0) (1, 0) (2, 0)
1 (-2, 1) (-1, 1) (0, 1) (1, 1) (2, 1)

各格子点位置のx, yの値が各配列の要素に合っていることが確認できる。

格子点座標による演算

生成された格子座標に演算を施したり関数に適用すると、各格子点位置の値が計算される。

 

matplotlib.pyplot.axes – 縦横比をそろえる

pyplot.axesでグラフを表示する際に、縦横比を1:1に揃えたい場合。

axes.set_aspect('equal')

matplotlib.pyplot.axes – 任意位置へのグラフの配置

グラフを任意の位置に任意のサイズで表示する手順。

pyplot.axes(rect)

ここでrect = [left, bottom, width, height]で指定し、left, bottmはグラフの左下隅の位置、width, heightはグラフのサイズ。それぞれの値は、figureの範囲を0, 1とした場合の相対値。

matplotlib.pyplot – axesとsubplotによる複数グラフの表示

概要

1つのfigureの中に複数のaxesを表示する方法には、add_subplot()メソッド、subplots()メソッドの2通りがある。

add_subplot()による方法

Figure.add_subplot()は既存のfigureオブジェクトにsubplotを追加してAxesオブジェクトを生成する。

add_subplot()
figureに1つのAxesオブジェクトを生成
add_subplot(pos)
posは行数・列数・位置を表す3桁の整数。例えば234なら、2行3列のうち4番目の図。各数は当然10未満でなければならない。
add_subplot(nrows, ncols, index)
上記のposを分解して指定。行数・列数が多いときに使える。

subplots()による方法

Figure.subplots()は行数と列数を指定して各位置のaxesを配列として一度に生成する。

subplots(nrows=1, ncols=1, figsize=(6.4, 4.8))
nrowsncolssubplotの行数・列数。

戻り値はaxesの配列だが、行数・列数によって配列の次元が違ってくるので注意。

行数・列数とも1の場合(あるいはnrows、ncolsを省略した場合) Axesオブジェクトが1つ生成される。
行数・列数のいずれかが1の場合 1次元のAxesオブジェクトの配列が生成される。
行数・列数とも1より大きい場合 nrows×ncolsのサイズで2次元のAxesオブジェクトの配列が生成される。

行や列のぶち抜きグラフを描きたいとき

以下のようなグラフを描きたいときの方法はこちら

subplotの間隔や位置調整

figure内にsubplotで配置されたグラフの間隔やマージンを調整するにはsubplots_adjust()メソッドを用いる。

詳細な使い方はこちらを参照。

 

matplotlib.pyplot – axesによる表示(グラフエリアの表示要素)

概要

pyplotでグラフを描画する場合、pyplotのメソッドであるplotxlimを使うのが簡易だが、figureオブジェクトの下にaxesオブジェクトを生成して操作する方法がある。ここではaxesオブジェクトによる方法を整理してみた。

各メソッドの説明

axesオブジェクトの生成

ax = fig.add_subplot(arg)

figureオブジェクトからaxesオブジェクトを生成する。subplot()の引数argの指定方法には2通りある

なお、figureオブジェクトに属するaxesオブジェクトが1つの場合は以下のような指定もできる。

fig, ax = plt.subplots()

以後、グラフの描画やグラフエリアに対する表示オプションの設定は、得られたaxesオブジェクトのメソッドで行う。

グラフタイトル

axes.set_title(label[, loc])

文字列labelをグラフ上部に表示する。表示位置はloc="left"/"center"/"right"で指定(デフォルトは"center")

軸の設定

軸ラベル

axes.set_xlabel(label)
axes.set_ylabel(label)

文字列labelをx軸/y軸のラベルとして設定する。

set_xlabel()/set_ylabel()~軸のラベル

軸のスケール

axes.set_xscale(scale)
axes.set_yscale(scale)

軸のスケールを設定する。スケールの種類は以下の通り。

  • 'linear':通常の線形軸
  • 'log':対数軸
  • 'symlog':負の領域も含めた対数軸(−log (−x) for x < 0)
  • 'logit':?

軸の範囲

axes.set_xlim(left, right)
axes.set_ylim(bottom, top)

x軸・y軸の上限・下限を設定する。引数指定の変化などはpyplotのメソッドと同様

軸目盛の設定

axes.set_xticks(ticks)
axes.set_yticks(ticks)

ticksのリスト等の要素で軸目盛を設定する。軸目盛のラベルを変更したい場合は、ticksと同じ要素数のlabelsで以下を実行する。

axes.set_xticklabels(labels)
axes.set_yticklabels(labels)

なお、軸のラベルを非表示にしたいときは、以下のように指定する。

軸目盛を非表示にしたいときは以下を指定。

軸の調整

  • 軸の表示位置はspines()で指定する
  • 複数グラフの外側だけに軸ラベル・目盛ラベルを表示するには、各AxesオブジェクトについてAxes.label_outer()を実行する

凡例

pyplot.legend(loc=location)

データに設定されたラベルで、locationで指定した位置に凡例を表示する。locationの指定方法はpyplot.legendと同じ

詳細はpyplot – legendを参照。

格子

pyplot.grid(True/False)

Trueを指定すると、軸目盛に対応した格子が描かれる。

水平線・垂直線

axes.hlines([y, xmin, xmax, colors='k', linestyles='solid', label='']
axes.vlines([x, ymin, ymax, colors='k', linestyles='solid', label='']

指定した位置に水平線・垂直線を描く。引数の指定方法はpyplot.legendと同じ

テキスト

axes.text(x, y, str, size=size, color=color)

指定した位置にstrを表示させる。

参考サイト

pyplotpltを使う方法、axesaxを使う方法などがネット上にもそれぞれ存在していたが、以下の記事がたいへん参考になった。感謝したい。

早く知っておきたかったmatplotlibの基礎知識・・・

 

 

matplotlib.pyplot – figure~複数の図の描画

概要

pyplot.figure()は、実行のたびに新たなfigureオブジェクトを生成する。コンソールからの実行環境下では、各figureオブジェクトは別々のウィンドウとして表示され、それぞれにファイルへの保存が可能。

以下の例では、2つのfigureオブジェクトを生成し、それぞれにグラフをプロットし、それらをファイルに保存している。

figureで生成される図のサイズはfigsize=(width, height)で指定し、width, heightはインチ単位で指定する。省略した場合のデフォルトサイズは、6.4in×4.8in。

なお、figureオブジェクトを生成してグラフを描画する場合、直接figureに対してではなく、その中にaxesオブジェクトを追加して操作するのが通常。

matplotlib_pyplot_fig_1.png

matplotlib_pyplot_fig_2

 

matplotlib.pyplot – subplotによる複数グラフの描画

概要

pyplot.subplot()によって、一つのウィンドウに複数のグラフを描画できる。

subplot(rows, cols, positon)
subplot(rcp)

rowsでグラフの行数、colsで列数を指定。positionはrows*colsの中での描画位置を1つの数値で指定し、1行1列目→1行2列目→・・・→2行1列目→2行2列目の順番に1から1つずつ増えていく。

ここで引数指定に2つの方法があって、rows, col, positionをそれぞれ1つの数値として指定する方法と、rcpの形で1つの数値として指定する方法がある。たとえば2行3列のグラフエリアの2行2列目を指定する場合は(2, 3, 5)(235)となる。

以下の例は、2×2のグラフを描画する例。