কম্পিউটার টিউটোরিয়াল

Matplotlib Python-এ 'imshow' ব্যবহার করে বাইভেরিয়েট ডিস্ট্রিবিউশন কীভাবে দেখাবেন?

Matplotlib Python-এ ডেটা ভিজ্যুয়ালাইজেশনের জন্য সবচেয়ে জনপ্রিয় লাইব্রেরি। এটি ডেটার গভীর প্যাটার্ন বোঝার জন্য জটিল হিসাবের বদলে চিত্রাবলী প্রদান করে। পরিমাণগত অন্তর্দৃষ্টি দক্ষতার সাথে যোগাযোগ করতে সাহায্য করে।

বাইভেরিয়েট ডিস্ট্রিবিউশন কী?

দুটি স্বতন্ত্র র‍্যান্ডম ভেরিয়েবল (X এবং Y) একসাথে থাকার সময় কোনো ঘটনার সম্ভাবনা বোঝাতে বাইভেরিয়েট ডিস্ট্রিবিউশন ব্যবহৃত হয়। এটি ২D সম্ভাবনা ঘনত্ব ফাংশন (PDF) হিসেবে প্রকাশ পায়।

'imshow' ফাংশনের ভূমিকা

Matplotlib-এ imshow() মূলত ছবি প্রদর্শনের জন্য তৈরি, কিন্তু ২D অ্যারে (ম্যাট্রিক্স) কালার ম্যাপ হিসেবে দেখানোর জন্যও ব্যাপকভাবে ব্যবহৃত হয়। বাইভেরিয়েট ডিস্ট্রিবিউশন ভিজ্যুয়ালাইজেশনের জন্য এটি আদর্শ।

ইনস্টলেশন ও নির্ভরতা

pip install matplotlib

নির্ভরতা: Python (≥3.4), NumPy, Setuptools, Pyparsing, Libpng, Pytz, FreeType, Six, Cycler, Dateutil।

উদাহরণ: বাইভেরিয়েট ডিস্ট্রিবিউশন প্লট করা

import numpy as np
import matplotlib.cm as cm
import matplotlib.pyplot as plt
import matplotlib.cbook as cbook
from matplotlib.path import Path
from matplotlib.patches import PathPatch

np.random.seed(9654241)

delta = 0.025
x = y = np.arange(-4.5, 4.5, delta)
X, Y = np.meshgrid(x, y)

# দুটি গাউসিয়ান ফাংশন
Z1 = np.exp(-X**2 - Y**2)
Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2)

# পার্থক্য लेकर বাইভেরিয়েট ডিস্ট্রিবিউশন তৈরি
Z = (Z1 - Z2) * 2

fig, ax = plt.subplots()
plt.title('একটি বাইভেরিয়েট ডিস্ট্রিবিউশন')
plt.xlabel('x-অক্ষ')
plt.ylabel('y-অক্ষ')

im = ax.imshow(Z, interpolation='bilinear', origin='lower',
               extent=[-3, 3, -3, 3],
               vmax=abs(Z).max(), vmin=-abs(Z).max())
plt.show()

আউটপুট

Matplotlib Python-এ  imshow  ব্যবহার করে বাইভেরিয়েট ডিস্ট্রিবিউশন কীভাবে দেখাবেন?

কোড ব্যাখ্যা

  1. প্যাকেজ ইম্পোর্ট: NumPy, Matplotlib-এর cm (কলার ম্যাপ), pyplot, cbook, Path, PathPatch মডিউলগুলো ইম্পোর্ট করা হয়েছে।
  2. র‍্যান্ডম সিড: np.random.seed() দিয়ে পুনরাবৃত্তিযোগ্য ফলাফল নিশ্চিত করা হয়েছে।
  3. গ্রিড তৈরি: np.arange ও np.meshgrid দিয়ে X, Y коорডিনেট গ্রিড তৈরি করা হয়েছে।
  4. গাউসিয়ান ফাংশন: দুটি ২D গাউসিয়ান (Z1, Z2) তৈরি করা হয়েছে — একটি মূল বিন্দুতে (0,0), অন্যটি (1,1)-এ।
  5. Z মান গণনা: Z = (Z1 - Z2) * 2 দিয়ে পার্থক্য নেওয়া হয়েছে, যা একটি বাইভেরিয়েট ডিস্ট্রিবিউশন সৃষ্টি করে।
  6. ফিগার ও অ্যাক্সেস: plt.subplots() দিয়ে তৈরি।
  7. লেবেল ও টাইটেল: plt.title, plt.xlabel, plt.ylabel দিয়ে অক্ষ ও শিরোনাম দেওয়া হয়েছে।
  8. imshow প্লট: গুরুত্বপূর্ণ প্যারামিটারগুলো:
    • interpolation='bilinear' — পিক্সেলগুলোর মাঝপথে বিলিনিয়ার ইন্টারপোলেশন
    • origin='lower' — (0,0) নিচে বাম কোণে রাখা (গাণিতিক কনভেনশন)
    • extent=[-3, 3, -3, 3] — ডেটা কোঅর্ডিনেটে ম্যাপ করা
    • vmax/vmin — কালার স্কেলের সীমা সমমিত রাখা (নেতিবাচক ও ধনাত্মক মান সমান গুরুত্ব পাবে)
  9. প্রদর্শন: plt.show() দিয়ে প্লট দেখানো।

প্রো টিপস

  • cmap='RdBu' বা 'seismic' ব্যবহার করুন ডাইভার্জিং ডেটার জন্য (নেতিবাচক/ধনাত্মক স্পষ্ট দেখাবে)।
  • plt.colorbar(im) যোগ করুন কালার স্কেল দেখানোর জন্য।
  • বড় ডেটাসেটে interpolation='nearest' দ্রুত রেন্ডার করে।
  • origin='upper' ছবি প্রসেসিং-এ ব্যবহার হয়, গাণিতিক প্লটে 'lower' মানক।
  1. Matplotlib দিয়ে Python-এ 3D স্ক্যাটার প্লট তৈরি করার পদ্ধতি

  2. পাইথনে Matplotlib ব্যবহার করে তিন-মাত্রিক লাইন প্লট তৈরি করা

  3. Matplotlib এবং Python ব্যবহার করে একই ফিগারে একাধিক প্লট কীভাবে আঁকা যায়?

  4. Python-এ Matplotlib ব্যবহার করে হিস্টোগ্রাম কীভাবে তৈরি করা যায়?