5-5.他にもいろいろあります
ここでは,細かく紹介するまで使用頻度が高くはありませんが,その存在を知っておくと便利なmatplotlibの機能を簡単に紹介します.
(1) 信頼区間/面グラフを描画する
信頼区間とは,特定の確率でデータが含まれる範囲を指しますが,これにはfill_betweenが有効です.Axes.plotと合わせることで面グラフを作ることも可能です.
axes. fill_between ( x, y1, y2=0, where=None… **kwargs )
棒グラフを作成します.
x,y1,y2で描画する範囲を指定します.
whereは描画をしないx範囲を指定します.
kwargsはcolorやedgecolor,linewidthなどの体裁オプション群を指します.
Alphaオプションで塗りつぶしの濃淡を表現できます.
棒グラフを作成します.
x,y1,y2で描画する範囲を指定します.
whereは描画をしないx範囲を指定します.
kwargsはcolorやedgecolor,linewidthなどの体裁オプション群を指します.
Alphaオプションで塗りつぶしの濃淡を表現できます.

(2) 好きなところにグラフを配置する
先程提示した図の中に小さなグラフがあります.これは,plt.axesという関数を使っています.ズームしたグラフをグラフの中に作成するで紹介した方法もありますが,グラフの縮尺が元のグラフに依存してしまう問題があります.plt.axesは好きな場所に好きな大きさでaxesオブジェクトが描画できるのでおすすめです.なお,これはオブジェクト記法では使えないので注意してください.この関数で生成したオブジェクトに対してmark_insetを使用することで引き出し線を書くこともできます.
matplotlib.pyplot.axes(arg = [left, bottom, width,hight ]…)
argとして[x位置,x位置,長さ,高さ]に従ったaxesを生成します.
argとして[x位置,x位置,長さ,高さ]に従ったaxesを生成します.
(3) 軸線の表示を操作する
グラフを作成する際にY軸全体やその一部を消したいという要望が時々あります.この時はオブジェクト指向で体裁を整えるで紹介したオブジェクト一覧を見直してください.軸線はspinesというオブジェクト名が指定されていました.これを操作したい際にはaxes.spines["place"]を指定し,以下のような編集を行います.
>>> axes.spines["left"].set_visible(False) → 左軸を消す >>> axes.spines["bottom"].set_bounds(1960,2020) → 下軸を20から80の範囲だけ表示する
(4) 直線を引く
グラフを書く際に特定の範囲を縦線or横線で区切りたいということがあります.これは,vlinesとhlinesで実現できます.Vはvertivcal(垂直),hはhorizontal(水平)方向をそれぞれ意味します.vlinesの使用例が次ページのグラフです.これの矢印板としてarrowもあります.
Axes.vlines(x, ymin, ymax, colors='k', linestyles='solid', label='', *, data=None, **kwargs)
指定したx地点においてyminからymaxを結ぶ縦線を記述します.
Axes.plotと同様に線のスタイルやラベル貼り付けが可能です.
指定したx地点においてyminからymaxを結ぶ縦線を記述します.
Axes.plotと同様に線のスタイルやラベル貼り付けが可能です.
Axes.hlines(y, xmin, xmax, colors='k', linestyles='solid', label='', *, data=None, **kwargs)
指定したy地点においてxminからxmaxを結ぶ縦線を記述します.
Axes.plotと同様に線のスタイルやラベル貼り付けが可能です.
指定したy地点においてxminからxmaxを結ぶ縦線を記述します.
Axes.plotと同様に線のスタイルやラベル貼り付けが可能です.

(5) 折れ線の確率密度を示す
これも先程のhlinesを使います.時々,折れ線の特定の地点xにおけるデータのばらつきを示すために横向きになった確率分布を重ねることがあります.hlinesはグラフに1本の横線を引く関数でしたが,これの描画範囲をyについて究極に微分していけば横向きの確率密度を示すことが出来ます.確率の大きさはxminとxmaxの差がそれを表現します.確率密度を最も簡単に計算する方法にscipy.statsがありますが,話がやや脱線するのでここでは説明しません.ポアソン分布のような離散的なものの場合は通常設定では線が細すぎるため,引数のlinewidthを大きくしてあげることで表現が出来ます.


(6) 凡例を自作する
グラフを作成する際に引数として label=” ”を入れ,ax.legendを呼び出すことで自動的に凡例を作成することが出来ますが,これでは都合が悪いことがあります.このときにはlines.Line2Dを使って凡例を自作しましょう.これを使うには matplotlib.linesのimportが必要な点に注意しましょう.とんでもない数の引数がありますが,要は折れ線(lines)や散布図(marker)のオブジェクトを作っていると考えてくれればいいと思います.
matplotlib.lines.Line2D(xdata, ydata, linewidth=None, linestyle=None, color=None, marker=None, markersize=None, markeredgewidth=None, markeredgecolor=None, markerfacecolor=None, markerfacecoloralt='none', fillstyle=None, antialiased=None, dash_capstyle=None, solid_capstyle=None, dash_joinstyle=None, solid_joinstyle=None, pickradius=5, drawstyle=None, markevery=None, **kwargs)
長すぎるので説明は省略.
長すぎるので説明は省略.
例えば,3つ前の凡例は以下のように作っています.
凡例の自作
(凡例描画部だけを抜粋)
(凡例描画部だけを抜粋)
- Import matplotlib.lines as mlines
-
- #凡例オブジェクトの作成
- #最初の[ ], [ ]は xdata, ydataに相当し,複数作成しないことを意味している.
- Marker = mlines.Line2D([], [], color='blue', marker='o', linestyle='None',markersize=5, label='Install / Replace')
- Break = mlines.Line2D([], [], color='r', marker='X', linestyle='None', markersize=5, label='Break')
- Truncated = mlines.Line2D([], [], color='goldenrod', label='Left-truncated', linestyle="--")
- Recorded = mlines.Line2D([], [], color='blue', label='Recorded',linestyle="-")
- Censored = mlines.Line2D([], [], color='blue', label='Right-censored',linestyle="--")
-
- hand_lab = [Marker,Break,Truncated,Recorded,Censored]
-
- #凡例の描画
- #handleは凡例として描画するグラフオブジェクトのリストを意味する
- #ncolは凡例の列数,mode=”expand”はfigureオブジェクト全体に凡例を広げるという意味
- fig.legend(handles=hand_lab,edgecolor="k",ncol=3,loc="upper center",mode="expand")
-