Matplotlib

はPython向けグラフ描画ライブラリの一種である。

 概要 
プログラミング言語Pythonおよびその科学計算用ライブラリNumPyのためのグラフ描画ライブラリである。オブジェクト指向のAPIを提供しており、様々な種類のグラフを描画する能力を持つ。描画できるのは主に2次元のプロットだが、3次元プロットの機能も追加されてきている。描画したグラフを各種形式の画像（各種ベクトル画像形式も含む）として保存することもできるし、wxPython、Qt、GTKといった一般的なGUIツールキット製のアプリケーションにグラフの描画機能を組みこむこともできる。MATLABの対話環境のようなものを提供するpylabというインタフェースも持っている。Matplotlibは、BSDスタイルのライセンスの下で配布されている。

matplotlibは、Pythonのバージョン2.6以降、およびPython 3をサポートしている。
matplotlib 1.1.x以前は、Pythonのバージョン2.4から2.7までをサポートしていた。

オリジナルの開発者であるJohn Hunterは、癌治療による合併症のため、2012年8月28日に死去した。しかし、matplotlibの開発にはその他多数の人間が貢献しており、2012年11月9日には、Python 3を初めてサポートするバージョン1.2.0がリリースされた。John HunterにはPythonソフトウェア財団より特別功労賞 () が贈られた。

 機能 

 インタラクティブ 
Matplotlib はインタラクティブなグラフをサポートする。

Matplotlib は様々な GUI 実装をサポートしているため（⇒ #バックエンド）、それらを抽象化して統一的に扱えるようにするイベントが提供されている。プログラマーはイベントに対応するコールバック関数を作成し登録することでインタラクティブなグラフを作成できる。具体的には計 14 種類のイベントが定義されており（ボタン及びキーの押下・開放、マウスの運動・スクロール・Figure及びAxesへの出入り、ウィンドウの描画・リサイズ・閉鎖、Artistの選択）、これらは Matplotlib に特化した情報も属性として有している（例: イベントが発火した Axes 情報とデータ座標）。

またズーム・リサイズなど一般的なインタラクティブ機能をデフォルトで提供している。

また、チャットGPTを併用することで初心者でも使用が可能。

 バックエンド 
実際の描画を担う要素は と呼ばれる。Matplotlib は様々なバックエンドをサポートする。以下はその一例である：
+表. Matplotlib バックエンドの一覧名称タイプ出力先出力形式ラスターベクターAGG非インタラクティブ.png✔ -PDF.pdf -✔PS.ps、.eps -✔SVG.svg -✔PGF.pgf、.pdf -✔Cairo.png、.ps、.pdf、.svg✔✔QtAggインタラクティブQt✔ipymplJupyter Notebook / ipympl✔GTK4AggGTK✔macosxmacOS / Cocoa ✔TkAggTk✔WebAggWebブラウザ / TornadoGTK4CairoGTKwxAggWxWidgets✔

古い環境向けのバックエンドとしては GTK3Agg、nbAgg、GTK3Cairo、などがある。 

 MATLABとの比較 
matplotlibのpylabインタフェースは、MATLABの利用経験があるユーザがmatplotlibを簡単に習得できるように設計されている。

Python + Numpy + matplotlib + SciPy + etc. の組み合わせがMATLABに勝る点の例としては、以下のようなものが挙げられる。

 MATLABのような特定用途向けの言語ではなく、大規模なソフトウェア開発も可能な現代的オブジェクト指向言語であるPythonをベースにしている。
 素早くスクリプトを書くのに向いている。CGIスクリプトを作ることもできる。
 フリーかつオープンソースである。ライセンスサーバも必要ない。
 ネイティブなSVGのサポート。

 プロット例 
折れ線グラフ
thumb
>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> a = np.linspace(0,10,100)
>>> b = np.exp(-a)
>>> plt.plot(a,b)
>>> plt.show()

ヒストグラム
thumb
>>> import matplotlib.pyplot as plt
>>> from numpy.random import normal,rand
>>> x = normal(size=200)
>>> plt.hist(x,bins=30)
>>> plt.show()

散布図
thumb
>>> import matplotlib.pyplot as plt
>>> from numpy.random import rand
>>> a = rand(100)
>>> b = rand(100)
>>> plt.scatter(a,b)
>>> plt.show()

3Dグラフ
thumb
>>> from matplotlib import cm
>>> from mpl_toolkits.mplot3d import Axes3D
>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> fig = plt.figure()
>>> ax = fig.gca(projection='3d')
>>> X = np.arange(-5, 5, 0.25)
>>> Y = np.arange(-5, 5, 0.25)
>>> X, Y = np.meshgrid(X, Y)
>>> R = np.sqrt(X**2 + Y**2)
>>> Z = np.sin(R)
>>> surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm)
>>> plt.show()

 ツールキット 
Matplotlibの機能を拡張するためのいくつかのツールキットが存在する。Matplotlibのソースコードに付属するものもあれば、別途にダウンロードする必要のあるものもある。

Basemap: 様々な投影法・海岸線・政治的国境による地図の描画
 現在は cartopy の使用が推奨されている
Mplot3d: 3次元プロット
Natgrid: natgridライブラリ用のインタフェース
Excel tools: Microsoft Excelとのデータ交換を行なうユーティリティ
GTK tools: GTKライブラリ用のインタフェース

 脚注 

 参考文献 




外部リンク


 matplotlib Thumbnail gallery - 多数の応用的なプロット例を見ることができる。
 Matplotlib Cookbook

カテゴリ:オープンソースソフトウェア
カテゴリ:科学ソフトウェア
Category:グラフ作成ソフト
Category:Pythonライブラリ
Category:Pythonでプログラムされた自由ソフトウェア
カテゴリ:2003年のソフトウェア