Python
 Computer >> コンピューター >  >> プログラミング >> Python

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 でデータ座標系に変換することで、画像を正確な位置に描画できます。

出力結果

Matplotlibでぼかし(ブラー)のかかったポイントをプロットする方法

実行すると、ぼかしの強さが異なる複数のポイントがグラフ上に表示され、sigma値に応じて徐々に広がっていく様子が確認できます。この手法は、ヒートマップ的な表現や、データの密度・不確実性を視覚的に示したい場合などに応用できます。

  1. Matplotlibで3D軸に点をプロットする方法を解説

    Matplotlibを使って3D空間上に点をプロットするには、以下の手順に従います。 図のサイズを設定し、サブプロット間および周囲のパディング(余白)を調整します。 figure() メソッドを使用して、新しい図を作成するか、既存の図をアクティブ化します。 add_subplot() メソッドに projection=3d を指定して、3D投影のAxesを図に追加します。 scatter() メソッドを使用して、3D座標(x, y, z)の位置に点を描画します。 show() メソッドを使用して、図を画面に表示します。 コード例 from matplotlib import pyplot

  2. Python Matplotlibで3Dグラフをプロットする方法を解説

    PythonのMatplotlibを使えば、3次元の散布図やグラフを簡単に描画できます。この記事では、mpl_toolkits.mplot3dモジュールを利用して3Dグラフを作成する手順を、サンプルコード付きでわかりやすく解説します。 3Dグラフをプロットする基本手順 Pythonで3Dグラフを描くには、以下のステップに従います。 figure()メソッドを使って、新しい図(フィギュア)を作成するか、既存の図をアクティブにします。 Axes3Dオブジェクトを取得して、3D用の座標軸を準備します。 x、y、zそれぞれのデータポイントをリストとして定義します。 scatter3D()メソッドを使