পয়েন্টের বদলে ব্লার করা মার্কার প্লট করতে: (১) একটি মার্কার ইমেজ তৈরি করুন, (২) সেটি ফাইল হিসেবে সেভ করুন, (৩) Gaussian ফিল্টার (scipy.ndimage.gaussian_filter) দিয়ে ব্লার করুন, (৪) BboxImage হিসেবে অ্যাক্সেসে যোগ করুন।
- ফিগার সাইজ এবং লেআউট সেট করুন।
- ফিগার ১: বড় মার্কার আঁকে
marker.pngহিসেবে সেভ করুন। - মার্কার ইমেজ লোড করুন (
plt.imread)। - ফিগার ২: র্যান্ডম X, Y পয়েন্ট জেনারেট করুন।
- প্রতিটি পয়েন্টের জন্য
gaussian_filter(marker, sigma)দিয়ে ব্লার করুন (sigma বাড়ালে বেশি ব্লার)। BboxImageতৈরি করেax.add_artist()দিয়ে যোগ করুন।plt.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
# Marker image create
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)
# Blurred points plot
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()
১০টি ব্লার ডায়ামন্ড ماركার দেখাবে, যাদের ব্লারনেস (sigma) ক্রমাগত বড় হচ্ছে (বাম থেকে ডানে)।
নোট: এই পদ্ধতিটি কম্পিউটেশনালি ব্যয়বহুল; বড় ডেটাসেটের জন্য scatter() + অ্যালফা বা কर्नেল ডেনসিটি এস্টিমেশন ভালো।