pyplot – グラフ要素のフォントサイズ

グラフ全体のフォントサイズ

pyplot.rcParams()で基準のフォントサイズを変更。デフォルトはfont.size=12。以下は全体のフォントサイズを大きくした例。

個別要素のフォントサイズ

タイトル、軸ラベル、軸目盛、凡例について個別にフォントサイズを指定した例。

 

matplotlib.pyplot.barh – 横棒グラフ

概要

barh()は横棒グラフを描く。主要なパラメーターは以下の通り。
barh(y, width, height, left, align, fc, ec, linewidth, xerr, capsize, log)

y, width, height
yは縦方向の座標で棒グラフのラベルをリスト等で指定するのが一般的。widthは棒の長さでこれもリスト等で指定。heightは棒の太さでデフォルトは0.8だが数値/リスト等で指定可。
align
alignはデフォルトで'center'だが、'edge'を指定すると棒の下側がラベルに合わせられる。上を合わせるにはheightに負の値を指定する。
fc, ec, linewidth
fc/colorは棒の塗りつぶし色、ec/edgecolorは縁の色、linewidthは縁の太さ
xerr, capsize
xerrは誤差の範囲でリスト等で指定。capsizeは誤差範囲の両端の直交線の長さ。
log
log=Trueを指定すると横軸が対数スケールになる。

実行例

基本形

基本的な使い方で、第1引数yに縦軸のラベル、第2引数widthに各棒の長さをそれぞれリストで与える。

色・枠線の指定

棒の塗りつぶし色と枠線の色・太さを指定。

高さ・位置

棒の高さ、開始位置を指定し、ラベルに対して棒の下端を合わせている。

誤差

棒の端に誤差範囲を表示。

対数軸

横軸を対数軸としている。

 

pyplot – グラフエリアが切れる・はみ出る

グラフのラベルがはみ出てしまう場合がある。

このようなときは、pyplotfigureに対してsubplots_adjust()leftbottomなどの引数でマージンを指定する。

 

pyplot – グラフの端が枠線で切れる

pyplotでグラフを描画したとき、軸の端の方でグラフが見切れてしまう。軸の外側も使って線や点をクリップせずに表示させるには、各グラフ描画の引数でclip_on=Falseを指定する。

 

matplotlib.patches – 図形の描画

概要

matplotlib.patchesパッケージに様々な図形クラスが準備されていて、Axesadd_patch()メソッドでそれらのオブジェクトを加えていく。

各種図形

以下の点は各図形において共通

  • ほとんどの図形は引数xyで基準点のx座標とy座標をタプルで与える
  • edgecolor/ecで外枠の色、facecolor/fcで塗りつぶし色を指定する
  • fill=True/Falseで塗りつぶしの有無を指定する
  • angleで傾きの角度を指定できる図形がある
Circle(xy[, radius=5])
中心点を指定して円を描く。
Ellipse(xy, width, height[, angle])
中心点と幅・高さを指定して楕円を描く。
Rectangle(xy, width, height[, angle])
左下の点と幅・高さを指定して楕円を描く。
CirclePolygon(x, y, rasius=5, resolution=20)
多角形を描画。辺/頂点の数をresolutionで指定する。
Polygon(xy, closed=True)
複数の点を指定して図形を描画する。xyはNx2配列(xy座標を要素とした2次元配列)。closedをFalseに指定すると図形の最初の点と最後の点を結ばない。
Arc(xy, width, height[, angle, theta1, theta2])
楕円の一部の弧を描く。扇形に中を塗りつぶすことはできない。
Wedge(center, r, theta1, theta2[, width=None])
円の一部を切出した図形を描く。widhを指定すると中心からその長さだけ除かれて描かれる。
Arrow(x, y, dx, dy[, width, ...])
矢印を描画する。
FancyArrow(x, y, dx, dy[, width, ...])
鏃を片側だけにしたり、鏃の大きさや形を設定したりできる。

 

Pyplot – グラフの標準色

Pyplotのグラフを描くときに標準で使われる色を直接指定する方法。色名に"tab:blue"のように指定する。

pyplot – zorder~グラフの描画順

pyplotでグラフを描画する際、点よりも線の方が上になって見栄えが悪い・・・といった場合に、どのグラフから上にするかという指定が必要になる。

グラフ描画の優先性はplot()scatter()などのグラフメソッドの引数にzorderを指定して実現できる。zorderに指定した値がより大きいグラフの方が上のレイヤーになる。指定できる値は正負の実数。

左のグラフは後から実行しているscatterplotの下に表示されている。

右のグラフではzorderを指定しており、scatterの方が値が大きいため上のレイヤーに表示されている。

 

 

pyplot – legend~凡例

概要

pyplotの各グラフに凡例を入れるには、legend()メソッドを使う。基本の使い方は以下の通り。

  1. plotやscatterなどでグラフを描く時の引数にlabel=”…”でラベルを定義する。ここで設定した文字列が凡例に使われる。
  2. グラフフィールドのオブジェクトのlegend()メソッドを実行する。

凡例の位置

標準的な位置指定

凡例の位置はloc引数に対して定義された文字列で指定する。

位置しての文字列は’[縦位置] [横位置]’で指定。

縦位置はupper, center, lowerの何れか、横位置はleft, center, rightの何れかで、縦位置と横位置の間には半角スペースを入れる(たとえば'upper right')。ただし縦横中心の場合は'center'

デフォルトは'best'で最も適切な位置が自動で設定される。

bboxによる位置指定~凡例の外側への設置

Axes.legend()の位置指定で引数としてbbox_to_anchorを指定することで、グラフの描画領域の相対位置を細かく指定することもできる。

bbox_to_anchor=(x, y)

x, yはグラフ描画行きの左下を(0, 0)、右上を(1, 1)としたときの相対位置。ここで指定した位置とlocで指定した凡例の基準点を一致させる。

以下のコードは、全てbbox_to_anchor=(1, 1)として凡例を描画域の右上に合わせている。その上でlocで指定した凡例の位置がこの点と一致させられる。

たとえばloc="lower right"とすると凡例の左下の位置が描画域の右上と同じになるように配置される。また、標準では凡例の枠の周りに少しパディングが行われるが、borderaxespad引数で数値を指定することでその間隔を調整できる。

ただし、この例では凡例が画面の右側ではみ出て切れてしまっている。このようなときは、tightlayout()をFigureに対して実行することで描画領域に全体を収めることができる。

凡例の並べ方

凡例はデフォルトでは縦に並べられるが、ncolに整数を指定して凡例の列数を指定できる。

デザイン等

このほか、デザイン関連で以下のような引数がある

title=[文字列]
凡例内にタイトルを設定。
fancybox=False/True
Trueを指定すると凡例の枠の角が丸くなる。
shadow=False/True
Trueを指定すると凡例に影がつけられる。

凡例の文字サイズ

凡例本体の文字サイズは、legend()の引数fontsizeで指定する。

凡例のタイトルの文字サイズは、凡例オブジェクトからget_title()でタイトルオブジェクトを取得し、set_fontsize()で設定する。

この2行の手続きは、以下のようにチェインによって1行で書くこともできる。

引数handleslabels

legend(handles, labels)という指定方法。公式ドキュメントではこちらが先に示されている。

Axes.get_legend_handles_labels()の戻り値として、グラフ要素のhandleとそれに対するlabelのリストが得られる。

この方法は、後述のように複数のグラフの凡例をまとめて扱うときに利用する。

複数グラフの場合の凡例

複数のAxesのグラフの凡例を1つにまとめて表示したい場合は、それぞれのAxesでhandleとlabelを取得しておき、それらを結合してlegend()の引数とする。

上の方法だと特定のAxesに凡例が表示されるが、これをまとめたいときには、figureに凡例を表示させる。

 

Axes.twinx – 2つのy軸のグラフ

基本

Axes.twinx()は元のAxesオブジェクトを複製する。ただし新たなAxesには横軸がなく縦軸が逆側にある。2つのグラフを、それぞれに対するy軸とともに重ねて表示したいときに使う。手順は以下の通り。

  1. 基本のAxesインスタンスを生成
  2. 基本のAxesインスタンスでtwinx()メソッドを実行して2軸目のAxesインスタンスを得る
  3. それぞれのAxesオブジェクトに対して描画、設定

凡例

twinx()で得られたAxesと元のAxesは異なるインスタンスなので、それぞれの凡例を表示させると、ばらばらの位置になったり完全に重なったりしてしまう。

これらの凡例を一括して扱うには、handleとlabelを取得して結合する方法を使う。

matplotlib.pyplot.scatter – 散布図

概要

scatterはx座標とy座標のペアを与えて散布図を描く。

scatter(x, y, color/c=color, s=n, marker=marker, edgecolors=color)
xyは散布図の点の座標で、数値の場合は1点、配列の場合は複数の点を描く。color(またはc)とedgecolormatplotlibcolor指定markermatplotlibmarkers指定sはマーカーのサイズ。

基本形

複数系列

複数系列の場合は、系列ごとにscatterを実行する。