Matplotlib-এ LineCollection ব্যবহার করে লাইন গ্রাফের কালার ডেটা ইন্ডেক্স (ডেরিভেটিভ/স্লোপ) অনুযায়ী ভেরিয়েট করুন। দুটি উদাহরণ: ক্রমাগত কালারম্যাপ (viridis) এবং ডিসক্রিট কালারম্যাপ (r/g/b)।
ধাপসমূহ
- ফিগার সাইজ ও প্যাডিং সেট করুন
- x, y ডেটা জেনারেট করুন (sin wave)
- ডেরিভেটিভ (dydx) ক্যালকুলেট করুন
- পয়েন্টস ও সেগমেন্টস অ্যারে বানান
- ২টি সাবপ্লট: (১) ক্রমাগত viridis, (২) ডিসক্রিট r/g/b
LineCollection,Normalize,BoundaryNormব্যবহার করুন- কালারবার যোগ করুন
show()দিয়ে দেখান
উদাহরণ কোড
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection
from matplotlib.colors import ListedColormap, BoundaryNorm
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
x = np.linspace(0, 3 * np.pi, 500)
y = np.sin(x)
dydx = np.cos(0.5 * (x[:-1] + x[1:]))
points = np.array([x, y]).T.reshape(-1, 1, 2)
segments = np.concatenate([points[:-1], points[1:]], axis=1)
fig, axs = plt.subplots(2, 1, sharex=True, sharey=True)
# ক্রমাগত কালারম্যাপ
norm = plt.Normalize(dydx.min(), dydx.max())
lc = LineCollection(segments, cmap='viridis', norm=norm)
lc.set_array(dydx)
lc.set_linewidth(2)
line = axs[0].add_collection(lc)
fig.colorbar(line, ax=axs[0])
# ডিসক্রিট কালারম্যাপ
cmap = ListedColormap(['r', 'g', 'b'])
norm = BoundaryNorm([-1, -0.5, 0.5, 1], cmap.N)
lc = LineCollection(segments, cmap=cmap, norm=norm)
lc.set_array(dydx)
lc.set_linewidth(2)
line = axs[1].add_collection(lc)
fig.colorbar(line, ax=axs[1])
axs[0].set_xlim(x.min(), x.max())
axs[0].set_ylim(-1.1, 1.1)
plt.show()
আউটপুট
উপরের সাবপ্লটে সাইন ভেবে কালার ডেরিভেটিভ অনুযায়ী ক্রমাগতভাবে viridis কালারম্যাপে ভেরিয়েট করছে। নিচের সাবপ্লটে ৩টি ডিসক্রিট কালার (লাল/সবুজ/নীল) ডেরিভেটিভ রেঞ্জ অনুযায়ী।