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^--‘のように表現。複数の線をまとめて指定可能。

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 – 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次元グラフ表示の概要をまとめる。

必要なライブラリは以下のように指定。

基本

立方体の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次元座標で指定

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

曲面の表示

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 = 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()メソッドを用いる。

figure.subplots_adjust(hspace=h, wspace=w)

hspaceは高さ方向の間隔(height space)、wspaceは幅方向の間隔(width space)で、デフォルト値はh=w=0.2

plt.subplots_adjust()として紹介されている例が多いが、figureのメソッドとしてよい。