Matplotlibでぼかし(ブラー)のかかったポイントをプロットする方法
データの視覚化において、ポイントを意図的にぼかして表現したいケースがあります。例えば、不確実性や拡散を表現したい場合などです。Matplotlibでは、SciPyのガウシアンフィルタとBboxImageを組み合わせることで、ぼやけた(ブラーのかかった)ポイントを簡単にプロットできます。
実装の手順
以下の手順に従って、ぼかしのかかったポイントを描画します。
- 図のサイズを設定し、サブプロット間および周囲のパディングを調整します。
- 新しい図を作成するか、既存の図をアクティブにします。
- サブプロット構成の一部として、図に ax1 を追加します。
- まず、ぼかす対象となるマーカーを作成します。
- X軸・Y軸のスケールを設定し、軸を非表示にします。
- マーカーをファイルに保存し、その画像を読み込んで、ぼかし処理後にプロットできるようにします。
- 前の図 fig1 を閉じます。
- 新しい図を作成するか、既存の図 fig2 をアクティブにします。
- ランダムなデータポイント x と y を生成します。
- ガウシアンフィルタを適用してぼかし効果を作り出し、そのアーティストを現在の軸に追加します。
- ax2 にX軸・Y軸のスケールを設定します。
- 図を表示するには、show() メソッドを使用します。
コード例
import matplotlib.pyplot as plt
from scipy import ndimage
from matplotlib.image import BboxImage
from matplotlib.transforms import Bbox, TransformedBbox
import numpy as np
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
fig1 = plt.figure()
ax1 = fig1.add_subplot(111)
ax1.plot(0.5, 0.5, 'd', ms=200)
ax1.set_ylim(0, 1)
ax1.set_xlim(0, 1)
plt.axis('off')
fig1.savefig('marker.png')
marker = plt.imread('marker.png')
plt.close(fig1)
fig2 = plt.figure()
ax2 = fig2.add_subplot(111)
x = 8 * np.random.rand(10) + 1
y = 8 * np.random.rand(10) + 1
sigma = np.arange(10, 60, 5)
for xi, yi, sigmai in zip(x, y, sigma):
markerBlur = ndimage.gaussian_filter(marker, sigmai)
bb = Bbox.from_bounds(xi, yi, 1, 1)
bb2 = TransformedBbox(bb, ax2.transData)
bbox_image = BboxImage(bb2, norm=None, origin=None, clip_on=False)
bbox_image.set_data(markerBlur)
ax2.add_artist(bbox_image)
ax2.set_xlim(0, 10)
ax2.set_ylim(0, 10)
plt.show()
コードの解説
このコードの仕組みは、大きく分けて2つの段階に分かれています。
第1段階:マーカーの作成と保存
まず fig1 上にダイヤ型の大きなマーカーを描画し、軸を非表示にした状態で「marker.png」として保存します。これにより、背景なしのマーカー画像が完成します。その後、plt.imread() で画像を読み込み直し、不要になった fig1 は閉じています。
第2段階:ガウシアンフィルタによるぼかし処理
fig2 上では、ランダムに生成した10個の座標点に対して、それぞれ異なる強度(sigma値:10〜55)のガウシアンフィルタを ndimage.gaussian_filter() で適用します。sigma値が大きいほど、ぼかしの度合いが強くなります。
ぼかした画像は BboxImage を使って各座標位置に配置されます。Bbox.from_bounds() でバウンディングボックスを作成し、TransformedBbox でデータ座標系に変換することで、画像を正確な位置に描画できます。
出力結果

実行すると、ぼかしの強さが異なる複数のポイントがグラフ上に表示され、sigma値に応じて徐々に広がっていく様子が確認できます。この手法は、ヒートマップ的な表現や、データの密度・不確実性を視覚的に示したい場合などに応用できます。
-
Matplotlibで3D軸に点をプロットする方法を解説
Matplotlibを使って3D空間上に点をプロットするには、以下の手順に従います。 図のサイズを設定し、サブプロット間および周囲のパディング(余白)を調整します。 figure() メソッドを使用して、新しい図を作成するか、既存の図をアクティブ化します。 add_subplot() メソッドに projection=3d を指定して、3D投影のAxesを図に追加します。 scatter() メソッドを使用して、3D座標(x, y, z)の位置に点を描画します。 show() メソッドを使用して、図を画面に表示します。 コード例 from matplotlib import pyplot
-
Python Matplotlibで3Dグラフをプロットする方法を解説
PythonのMatplotlibを使えば、3次元の散布図やグラフを簡単に描画できます。この記事では、mpl_toolkits.mplot3dモジュールを利用して3Dグラフを作成する手順を、サンプルコード付きでわかりやすく解説します。 3Dグラフをプロットする基本手順 Pythonで3Dグラフを描くには、以下のステップに従います。 figure()メソッドを使って、新しい図(フィギュア)を作成するか、既存の図をアクティブにします。 Axes3Dオブジェクトを取得して、3D用の座標軸を準備します。 x、y、zそれぞれのデータポイントをリストとして定義します。 scatter3D()メソッドを使