Matplotlibでグラフを描く:基本から応用まで

プログラミング

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を使いこなすことで、データの理解を深め、その結果を効果的に伝えるための強力な武器となります。