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

基本形

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

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

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

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

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

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

条件に合う行の取り出し

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

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

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

条件に合う列の取り出し

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

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

 

matplotlib.pyplot – 主なグラフの設定概要

概要

matlib.pyplotの各グラフの一般的な設定をまとめておく。なお、カラー、線のスタイル、マーカーの設定はそれぞれ以下を参照

各グラフの主な設定

scatter~散布図

scatter(x, y)
デフォルト設定で散布図を描く。
scatter(x, y, marker=markerstyle, c=color)
マーカーの種類と色を指定。色指定はc=/color=のどちらでもよい。
scatter(x, y, marker=markerstyle, s=size, color=color)
マーカーのサイズも指定

plot~折れ線

plot(x, y)
デフォルト設定で折れ線グラフを描く。
plot(x, y, c=color)
線の色を設定。色指定はc=/color=のどちらでもよい
plot(x, y, linestyle=linestyle, linewidth=width)
線のスタイルと太さを設定。
plot(x, y, marker=markerstyle, markersize=size)
マーカーのスタイルとサイズを設定。
plot(x, y, styles[, x, y, styles]...)
スタイル文字列を使う。スタイル文字列は、たとえば’g^--‘のように表現。複数の線をまとめて指定可能。

barh~横棒グラフ

barh(y, width)
ラベルと値を指定して棒グラフを描く。
hist(y, width, fc, ec, linewidth)
塗りつぶし色、枠の色や太さを指定。

hist~ヒストグラム

hist(data, bins=bins, label=label)
ビン数を指定してヒストグラムを描く。
hist(data, bins=bins, range=(min, max), color=color, edgecolor=color, linewidgh=width)
ビン数、レンジ、塗りつぶし色、枠線の色を指定。
hist(data, density=True)
頻度表示で設定。デフォルトは度数表示
hist(data, alpha=alpha)
複数のヒストグラムを重ねて描く場合の透明度をそれぞれ指定。各グラフのビン幅を揃えたいときは同じレンジを指定。
hist([data1, data2,...], bins=bins, color=[c1, c2,...], label=[l1, l2,...])
複数のヒストグラムを重ねずに並べて描く。
hist([data1, data2,...], bins=bins, stacked=True)
複数のヒストグラムを積み上げて描く。

円グラフ

pie(data, radius=r, counterclock=False, startangle=90, labels=labels, autopct=pctstring)
ラベルとパーセンテージの書式を指定して円グラフを描く。radiusは通常デフォルトの1を使う。counterclockstartangleはいちいち指定しないといけない。autopctの書式の基本形は、たとえば"%.1f"。ラベルとパーセンテージの位置を、半径の割合で指定可能(labeldistance, pctdistance)
pie(data, counteerclock=False, startangle=90, explode=explodelist)
explodeで各データの中心からの位置をリスト指定。同じ小さい値を全データにい指定するとデータ間に隙間ができる。特定データの値を大きくすると、そのデータのみ飛び出る。
pie(data, counteerclock=False, startangle=90, wedgegroups={'linewidgh':width, 'edgecolor'=color)
wedgegroupsに辞書を指定して、枠線の幅と色を指定。

ドーナツ型の

matplotlib – linestyle~線のスタイル

文字列/記号による指定

一般に使われる4つのスタイルについては、文字列あるいは記号で指定。

"solid" “-“ 連続線
"dashed" “–“ 破線
"dotted" “:” 点線
"dashdot" “-.” 一点鎖線

文字列指定の例

記号指定の例

実行結果

タプルによる任意のパターン指定

タプルによって、任意のパターンを設定することができる。

(offset, (fg, bg, fg, bg, ...))

第2要素のタプルの中で、前景色の長さと背景色の長さを交互に指定。第1要素は病か開始のオフセット。

matplotlib – color~色指定

概要

とりあえずのメモ書き。

1文字での指定

'b' blue/青
'g' green/緑
'r' red/赤
'c' cyan/シアン
'm' magenta/マゼンタ
'y' yellow/黄
'k' black/黒
'w' white/白

カラーネーム

matplotlibのカラーネーム

matplotlibのドキュメンテーション

グラフの標準色

各種グラフのデフォルトで用いられる標準色がある。

グレー表示

濃淡のレベルを”文字列で”指定。

color=['0.0', '0.2', '0.4', '0.6', '0.8', '1.0']

 

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とした場合の相対値。