Matplotlibでグラフを描く:基本から応用まで
Pythonのデータ可視化ライブラリであるMatplotlibは、科学技術計算やデータ分析において不可欠なツールです。その柔軟性と豊富な機能により、様々な種類のグラフを美しく描画することができます。ここでは、Matplotlibの基本から応用までを網羅し、グラフ作成の幅を広げるための情報を提供します。
Matplotlibの基礎
インストールとインポート
Matplotlibを使い始めるには、まずインストールが必要です。pipコマンドで簡単にインストールできます。
pip install matplotlib
インストール後、Pythonスクリプトで以下のコードを実行してインポートします。
import matplotlib.pyplot as plt
pltというエイリアスでインポートするのが一般的です。
基本的なグラフの作成
最も基本的なグラフは、折れ線グラフです。plt.plot()関数を使用します。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.show()
plt.show()でグラフが表示されます。
グラフのカスタマイズ
グラフの見た目を整えるために、様々なカスタマイズが可能です。
- タイトルとラベル: plt.title(), plt.xlabel(), plt.ylabel() で設定します。
- 凡例: 複数のデータをプロットする際に、plt.legend() で凡例を表示させます。
- 線のスタイルと色: plot() 関数の引数で指定できます(例: color=’red’, linestyle=’–‘)。
- マーカー: データ点を強調するために、plt.plot() の引数で指定します(例: marker=’o’)。
様々なグラフの種類
散布図
2つの変数間の関係性を視覚化するのに適しています。plt.scatter() 関数を使用します。
x = np.random.rand(50)
y = np.random.rand(50)
colors = np.random.rand(50)
sizes = 1000 * np.random.rand(50)
plt.scatter(x, y, c=colors, s=sizes, alpha=0.5)
plt.show()
`c`で色、`s`でサイズ、`alpha`で透明度を指定できます。
棒グラフ
カテゴリごとの値を比較するのに便利です。plt.bar() 関数を使用します。
categories = [‘A’, ‘B’, ‘C’, ‘D’]
values = [10, 25, 15, 30]
plt.bar(categories, values)
plt.show()
ヒストグラム
データの分布を把握するのに役立ちます。plt.hist() 関数を使用します。
data = np.random.randn(1000)
plt.hist(data, bins=30) # binsで棒の数を指定
plt.show()
円グラフ
全体に対する各部分の割合を示すのに適しています。plt.pie() 関数を使用します。
sizes = [15, 30, 45, 10]
labels = [‘Frogs’, ‘Hogs’, ‘Dogs’, ‘Logs’]
plt.pie(sizes, labels=labels, autopct=’%1.1f%%’) # autopctで割合を表示
plt.show()
高度なグラフ作成テクニック
複数のグラフを配置する (Subplots)
1つの図の中に複数のグラフを配置するには、plt.subplots() を使用します。
fig, axes = plt.subplots(nrows=2, ncols=2)
axes[0, 0].plot(x, y)
axes[0, 1].scatter(x, y)
axes[1, 0].bar(categories, values)
axes[1, 1].hist(data)
plt.tight_layout() # レイアウトの調整
plt.show()
`nrows`と`ncols`でグリッドの行数と列数を指定します。`axes`はNumPy配列になり、各要素が個別のAxesオブジェクトです。`plt.tight_layout()`はグラフ間の重なりを防ぎます。
2軸グラフ
異なるスケールのデータを同じグラフに表示したい場合、2軸グラフが役立ちます。
fig, ax1 = plt.subplots()
color = ‘tab:red’
ax1.set_xlabel(‘Time’)
ax1.set_ylabel(‘Temp’, color=color)
ax1.plot(x, y, color=color)
ax1.tick_params(axis=’y’, labelcolor=color)
ax2 = ax1.twinx() # x軸を共有する新しいAxesを作成
color = ‘tab:blue’
ax2.set_ylabel(‘Humidity’, color=color)
ax2.plot(x, y * 10, color=color)
ax2.tick_params(axis=’y’, labelcolor=color)
plt.show()
`ax.twinx()`で右側のy軸を持つ新しいAxesオブジェクトを作成します。
3Dグラフ
3次元空間のデータを可視化するために、mpl_toolkits.mplot3dモジュールを使用します。
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection=’3d’)
x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)
ax.scatter(x, y, z)
plt.show()
グラフの保存
作成したグラフは、plt.savefig() 関数で様々な形式で保存できます。
plt.plot(x, y)
plt.title(“My Plot”)
plt.savefig(“my_plot.png”) # PNG形式で保存
plt.savefig(“my_plot.pdf”) # PDF形式で保存
解像度を指定したい場合は、`dpi`引数を使用します(例: `plt.savefig(“my_plot.png”, dpi=300)`)。
まとめ
Matplotlibは、Pythonでグラフを作成するための強力で汎用的なライブラリです。基本的な折れ線グラフから、散布図、棒グラフ、ヒストグラム、円グラフ、さらには3Dグラフまで、多様なグラフタイプに対応しています。グラフのタイトル、ラベル、凡例、線のスタイル、色などのカスタマイズも容易であり、ユーザーのニーズに合わせてグラフを洗練させることができます。また、複数のグラフを1つの図に配置するサブプロット機能や、異なるスケールのデータを表示できる2軸グラフ、そして3Dプロット機能は、より複雑なデータ分析やプレゼンテーションに不可欠です。作成したグラフは、PNG, PDF, SVGなど様々な画像フォーマットで保存でき、レポートや発表資料への活用も容易です。Matplotlibを使いこなすことで、データの理解を深め、その結果を効果的に伝えるための強力な武器となります。
