MatplotlibでカスタムPNG画像をマーカーとしてプロットに表示する方法
Matplotlibのグラフでは、通常の点(ドット)の代わりに、カスタムのPNGやJPGなどの画像ファイルをマーカーとして表示することができます。これにより、データポイントをより視覚的で直感的なものにできます。
ここでは、画像をマーカーとして使うための手順を具体的に解説します。
実装手順
- 図のサイズと余白の調整: figureサイズを設定し、サブプロット間および周囲のパディングを調整します。
- 画像パスのリスト作成: 使用する画像ファイルのパス(ディレクトリ)を格納したリストを作成します。
- 座標データの準備: プロットする点のx座標とy座標のリストを用意します。
- 図とサブプロットの生成:
subplots()メソッドを使って、figureと一連のサブプロットを作成します。 - 画像の配置: 点の代わりに画像をプロットするため、zipでまとめたx・y・pathsを反復処理します。
- AnnotationBboxの生成: 画像と(x, y)座標を指定して
AnnotationBbox()をインスタンス化し、軸に追加します。 - 目盛りの設定: x軸・y軸それぞれに
xticksとyticksを設定します。 - 表示:
show()メソッドを使って図を表示します。
コード例
import matplotlib.pyplot as plt
from matplotlib.offsetbox import OffsetImage, AnnotationBbox
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
def getImage(path):
return OffsetImage(plt.imread(path, format="jpg"), zoom=.1)
paths = ['globe.jpg', 'settings.jpg', 'settings.jpg', 'globe.jpg']
x = [8, 4, 3, 6]
y = [5, 3, 4, 7]
fig, ax = plt.subplots()
for x0, y0, path in zip(x, y, paths):
ab = AnnotationBbox(getImage(path), (x0, y0), frameon=False)
ax.add_artist(ab)
plt.xticks(range(10))
plt.yticks(range(10))
plt.show()
コードのポイント解説
OffsetImageは、読み込んだ画像をオフセット可能なオブジェクトとして扱います。引数zoomでマーカーの表示サイズを調整できます(例では0.1倍に縮小)。AnnotationBboxは、指定した座標位置に画像などを配置するためのクラスです。frameon=Falseを指定することで、枠線なしのクリーンな表示になります。ax.add_artist(ab)により、生成したAnnotationBboxを軸に追加しています。- 画像ファイルは実行スクリプトと同じディレクトリに配置しておくか、絶対パス・相対パスで正しく指定してください。
出力結果

このように、OffsetImageとAnnotationBboxを組み合わせることで、散布図の各点を好きな画像に置き換えることができます。アイコンやロゴなどを使ったオリジナリティのある可視化にぜひ活用してみてください。
-
Matplotlibでカスタムカラーマップを作成し、imshow()でデータをプロットする方法
Matplotlibでimshow()を使ってデータを可視化する際に、独自のカスタムカラーマップを適用したいケースはよくあります。その場合は、以下の手順に従うことで簡単に実現できます。 実装の手順 図(figure)のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。 NumPyを使ってランダムなデータポイントを生成します。 色のリストからListedColormapオブジェクトを作成し、カスタムカラーマップを定義します。 データを画像として表示します。つまり、2次元の正規ラスター上に描画します。 図を画面に表示するには、show()メソッドを呼び出します。 なお、
-
matplotlibのFuncAnimationを使ってPythonで等高線図をアニメーション化する方法
Pythonのmatplotlibでは、FuncAnimationクラスを利用することで、等高線図(コンタープロット)を簡単にアニメーション化できます。時間とともに変化するデータを視覚的に表現したい場合に非常に便利な手法です。 等高線図をアニメーション化する手順 10×10×8の形状を持つランダムなデータを作成します。 subplots()メソッドを使って、図(Figure)とサブプロット(Axes)を作成します。 FuncAnimation()クラスを使い、指定した関数*func*を繰り返し呼び出すことでアニメーションを生成します。 フレームごとに等高線の値を更新できるよう、animat