Pythonの画像描画ライブラリ「Matplotlib」の、機械学習で使われる典型的なグラフ機能Pythonで始める機械学習入門(5)(3/3 ページ)

» 2017年11月02日 05時00分 公開
[加藤公一シルバーエッグ・テクノロジー]
前のページへ 1|2|3       

棒グラフと折れ線グラフを同時に描画

 次に、棒グラフを描きますが、棒グラフと折れ線グラフを同時に表示してみます。本稿で描くのは、学校の地理の授業でよく出てくるような雨温図(降水量と気温をグラフにしたもの)です。データは2016年の東京の気象情報を使います。気象庁のサイトにある過去の気象データのページからダウンロードして入手しましたが、ダウンロードのオプションが多く、標準的な形式がないので、データをプログラム内に記述しています。

 まずは、plt.subplotsにより、1つだけパネルを作り「ax1」に入れます。「ax1.bar」により棒グラフを描画しています。次に、yの範囲やxの目盛りを指定していますが、subplotsを使わない場合と比べてメソッド名が異なるので注意してください。ここでは、ax1のメソッドとしてset_ylimやset_xticksを使っていますが、subplotsを使わない場合はplt.ylimやplt.xticksを使っています。

 x軸を共有する異なるグラフを作るには「xtwin」メソッドを使います。ここでは、「ax1twinx()」により、ax1とx軸を共有する領域を作り、「ax2」に格納しています。「ax2.ylim」により、ax1とは別にax2のy軸の目盛りを指定します。ここで指定したものは、グラフの右側の軸に表示されます。そしてplotにより、折れ線グラフを描画します。

ヒストグラムを描画

 次に、ヒストグラムを描いてみます。ここでは、正規分布を行う乱数を幾つか取り出して、それをヒストグラムとして描画します。

 ここでは、乱数を500個生成してxに入れ、「plt.hist」でヒストグラムを描画しています。plt.histの引数binsは領域を幾つに区切るかを意味しています。ここではxの最大値と最小値の間を20個の区間に分割して、それぞれの区間に幾つのデータが入るかを数えてヒストグラムにします。

関数の等高線の書き方

 最後に、関数の等高線の書き方を紹介します。これは機械学習では、分類の結果を色分け表示するときにも使えます。ここでは、混合ガウス分布(の定数倍)の等高線を描画してみます。

 「f(x,y)」は混合ガウス分布の定数倍です(積分が1になるように正規化していません)。

 等高線を表示するには、xy平面を細かくメッシュに刻んでそのメッシュ上の点のそれぞれについて関数値を評価します。xとyにはそれぞれxの範囲とyの範囲を刻んだ値が入ります。それらに対して「X, Y = np.meshgrid(x,y)」とすると、メッシュを考え、メッシュの上の点にあるx座標とy座標が、それぞれ2次元配列としてXとYに入ります。

 次に、メッシュ点について関数値を評価します。2次元配列だと都合が悪いので、「.ravel()」によって1次元化してから関数の引数として与えます。fではブロードキャスティングが効いていて同時に関数値を計算します。その結果をメッシュと同じ形状に2次元化するために「.reshape(X.shape)」としています。これで必要なデータはそろったので、「plt.contourf(X,Y,Z)」で等高線を描画します。

公式サイトのドキュメントやギャラリーも参照しよう

 本記事ではMatplotlibの基本的な使い方を紹介しました。Matplotlibには他にも多くの機能があり、ここで紹介したのはごく一部です。全部の機能を覚える必要はないので、必要に応じて公式サイトのドキュメントを参照するのがよいでしょう。

 特に、ギャラリーにはひと目で分かる使い方の例が多く置いてあるので、これをざっと眺めて使えそうなもののソースコードを見て参考にするのがお勧めです。

前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。