matplotlib
は Python で最も有名なプロットライブラリであり、Matlab に似たコマンド API を提供しており、対話的なプロットに非常に適しています。また、プロットコントロールを GUI アプリケーションに埋め込むことも簡単です。
そのドキュメントは非常に充実しており、http://matplotlib.org/gallery.html
には数百のサムネイルがあり、それぞれのソースコードが表示されています。したがって、特定のタイプのプロットを作成する必要がある場合は、このページを参照してコピー&ペーストするだけでほとんどのことができます。
このセクションでは、Matplotlib の入門として、いくつかの例を詳しく説明し、Matplotlib のプロットの基本的な概念を理解し学ぶことを目指します。
1. クイックプロット#
Matplotlib の pyplot サブモジュールは、Matlab に似た 2D プロット API を提供し、ユーザーが簡単にプロットを作成できるようにします。まず、簡単な例を見てみましょう。
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 1000)
y = np.sin(x)
z = np.cos(x**2)
plt.figure(figsize=(8,4))
plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2)
plt.plot(x,z,"b--",label="$cos(x^2)$")
plt.xlabel("Time(s)")
plt.ylabel("Volt")
plt.title("PyPlot First Example")
plt.ylim(-1.2,1.2)
plt.legend()
plt.show()
figure を呼び出してプロットオブジェクトを作成し、それを現在のプロットオブジェクトにします。
plt.figure(figsize=(8,4))
または、プロットオブジェクトを作成せずに直接 plot 関数を呼び出してプロットを作成することもできます。Matplotlib は自動的にプロットオブジェクトを作成します。複数のプロットを作成する場合は、figure に整数パラメータを渡してプロットの番号を指定することができます。指定した番号のプロットオブジェクトが既に存在する場合は、新しいオブジェクトを作成せずに既存のオブジェクトを現在のプロットオブジェクトにします。
figsize パラメータを使用してプロットオブジェクトの幅と高さを指定することができます(単位はインチ)。dpi パラメータを使用してプロットオブジェクトの解像度を指定します(インチあたりのピクセル数)。デフォルト値は 80 です。したがって、この例では作成されるプロットウィンドウの幅は 8 * 80 = 640 ピクセルです。
次の 2 行のプログラムは、現在のプロットオブジェクトで plot 関数を呼び出してプロットを作成します。
plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2)
plt.plot(x,z,"b--",label="$cos(x^2)$")
plot 関数の呼び出し方法は非常に柔軟であり、最初の文では x、y の配列を plot に渡し、キーワード引数を使用してさまざまなプロパティを指定しています。
label : プロットされた曲線に名前を付けます。この名前は凡例(legend)に表示されます。文字列の前後に "$" を追加すると、Matplotlib は内蔵の LaTeX エンジンを使用して数式を描画します。
color : 曲線の色を指定します。
linewidth : 曲線の太さを指定します。
2 番目の文では、3 番目の引数 "b--" を使用して直接曲線の色とスタイルを指定しています。この引数はフォーマット文字列と呼ばれ、簡単な記号を使用して曲線のスタイルを指定することができます。ここでの "b" は青色を表し、"--" は破線を表します。フォーマット文字列の詳細な設定は、IPython で "plt.plot?" を入力して確認できます。
その後、一連の関数を使用してプロットオブジェクトの各プロパティを設定します。
plt.xlabel("Time(s)")
plt.ylabel("Volt")
plt.title("PyPlot First Example")
plt.ylim(-1.2,1.2)
plt.legend()
最後に、plt.show () を呼び出して作成したすべてのプロットオブジェクトを表示します。
2. 複数の軸をプロットする#
プロットオブジェクト(figure)は複数の軸(axis)を含むことができます。軸は Matplotlib でプロット領域を表し、サブプロットとして理解することができます。最初の例では、プロットオブジェクトには 1 つの軸しか含まれていないため、1 つの軸(サブプロット)しか表示されません。subplot 関数を使用して、複数の軸を持つグラフを簡単に作成できます。subplot 関数の呼び出し形式は次のとおりです。
subplot(numRows, numCols, plotNum)
subplot はプロット領域を numRows 行 * numCols 列のサブ領域に分割し、左上から右下に向かって順番に各サブ領域に番号を付けます。左上のサブ領域の番号は 1 です。numRows、numCols、plotNum の 3 つの数値が 10 未満の場合、それらを 1 つの整数で省略することができます。したがって、subplot (323) と subplot (3,2,3) は同じです。subplot は plotNum で指定された領域に軸オブジェクトを作成します。新しく作成された軸が以前に作成された軸と重なる場合、以前の軸は削除されます。
以下のプログラムは、6 つの軸を作成し、各軸に異なる背景色を設定しています。
for idx, color in enumerate("rgbyck"):
plt.subplot(320+idx+1, axisbg=color)
plt.show()
enumerate はリスト(list)や文字列(string)などのオブジェクトを列挙するために使用されます。enumerate はインデックス(index)と内容(item)を同時に取得することができます。
list = ["a", "b", "c", "d"]
for index, item in enumerate(list):
print index, item
>>>
0 a
1 b
2 c
3 d
特定の軸が行または列全体を占める場合は、次のように subplot を呼び出すことができます。
plt.subplot(221) # 上段の左
plt.subplot(222) # 上段の右
plt.subplot(212) # 下段
plt.show()
完全な内容を表示するには、元の記事を参照してください。
この記事は以下を参考にしています:http://old.sebug.net/paper/books/scipydoc/matplotlib_intro.html