Python Matplotlib Data Visualization Sinhala Tutorial | දත්ත දෘශ්‍යකරණය

Mastering Data Visualization with Matplotlib in Python | Sinhala Guide

අයියෝ, මේ මොකක්ද මේ Data Visualization කියන්නේ? වගේ ප්‍රශ්නයක් ඔයාටත් ඇවිත් තියෙනවද? නැත්නම්, Data Science වලට පිවිසෙන්න බලාගෙන ඉන්න, ඒත් කොහෙන් පටන් ගන්නද කියලා හිතාගන්න බැරිව ඉන්න යාළුවෙක්ද ඔයා? එහෙනම්, මේ ලිපිය ඔයාටම තමයි!

Data Visualization කියන්නේ, සංකීර්ණ දත්ත (complex data) ගොඩක්, අපිට පහසුවෙන් තේරුම් ගන්න පුළුවන් විදියට රූප සටහන් (charts), ග්‍රාෆ් (graphs) විදියට දක්වන එකට. හිතන්නකෝ, සංඛ්‍යා ගොඩක් තියෙන spreadsheet එකක් දිහා බලනවාට වඩා, ලස්සනට හදපු chart එකකින් ඒ දත්ත තේරුම් ගන්න එක කොච්චර ලේසිද කියලා! ඇත්තටම, දත්ත දෘශ්‍යකරණය කියන්නේ අපේ මොළයට දත්ත වල තියෙන රටා (patterns), ප්‍රවණතා (trends) සහ අසාමාන්‍යතා (outliers) ඉක්මනින් හඳුනාගන්න උදව් කරන බලගතු මෙවලමක්.

Python කියන්නේ Data Science වලට නැතුවම බැරි programming language එකක්. ඒ වගේම, Matplotlib කියන්නේ Python වල Data Visualization කරන්න තියෙන powerfulම සහ ජනප්‍රියම library එකක්. මේකෙන් අපිට static, animated, interactive plots ගොඩක් පහසුවෙන් හදාගන්න පුළුවන්. Matplotlib කියන්නේ මේ ක්ෂේත්‍රයේ ගොඩක් අයගේ තේරීමක්, මොකද ඒක ගොඩක් flexible සහ විවිධ plot වර්ග විශාල ප්‍රමාණයක් support කරනවා.

මේ ලිපියෙන් අපි Matplotlib භාවිතයෙන් Data Visualization කරන හැටි මුල ඉඳන්ම සරලව ඉගෙන ගන්නවා. Line plots, Bar plots, Scatter plots වගේ මූලික plot වර්ග හදන හැටි, ඒවා Customize කරන හැටි, ඒ වගේම Figures සහ Axes කියන්නේ මොනවද කියන එකත් අපි සාකච්ඡා කරනවා. අවසානයේදී, හොඳම පුරුදු (best practices) ටිකකුත් කියන්නම්. ඉතින්, Data Visualization වල Master කෙනෙක් වෙන්න ලෑස්ති වෙන්න!

Matplotlib කියන්නේ මොකක්ද?

Matplotlib කියන්නේ Python වල 2D plotting library එකක්. 3D plots කරන්නත් පුළුවන්. මේකෙන් scientific applications වලට use වෙන publication-quality figures හදාගන්න පුළුවන්. MATLAB පාවිච්චි කරලා තියෙන කෙනෙක්ට Matplotlib ඉගෙන ගන්න එක ගොඩක් පහසුයි, මොකද ඒ දෙකේ syntax ගොඩක් දුරට සමානයි.

Data Science වලදී Matplotlib ගොඩක් වැදගත් වෙන්නේ, අපිට අපේ දත්ත වල තියෙන patterns, trends, outliers වගේ දේවල් visualize කරලා ඉක්මනින් තේරුම් ගන්න පුළුවන් නිසා. මේක Data Exploration වලදී වගේම, අපේ විශ්ලේෂණ වල ප්‍රතිඵල (findings) අනිත් අයට පහසුවෙන් ඉදිරිපත් කරනකොටත් ගොඩක් ප්‍රයෝජනවත්. උදාහරණයක් විදියට, අලෙවි වාර්තාවක් (sales report) ඉදිරිපත් කරනකොට, සංඛ්‍යා ගොඩක් පෙන්නනවාට වඩා, මාසික විකුණුම් ප්‍රස්ථාරයක් පෙන්නන එකෙන් ගොඩක් දේවල් පැහැදිලි කරන්න පුළුවන් නේද?

පළමුවෙන්ම අපි Matplotlib install කරගන්න ඕනේ. ඔයා Anaconda වගේ Data Science platform එකක් use කරනවා නම් Matplotlib, NumPy, Pandas වගේ libraries දැනටමත් install වෙලා ඇති. නැත්නම්, ඔයාගේ command prompt (Windows) එකේ හෝ terminal (macOS/Linux) එකේ මේ විදියට type කරන්න:

pip install matplotlib numpy pandas

සාමාන්‍යයෙන් අපි Matplotlib වල `pyplot` module එක තමයි import කරගන්නේ. ඒක කෙටියෙන් `plt` කියලා හඳුන්වනවා. ඒ වගේම, අපි Pandas DataFrames එක්ක වැඩ කරන නිසා, Pandas library එකත් `pd` කියලාත්, NumPy library එක `np` කියලාත් import කරගමු. මේවා තමයි අපි Python වල Data Science කරනකොට බහුලවම පාවිච්චි කරන libraries.

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

මූලික Plot වර්ග හදමු

Data Visualization වලදී අපි ගොඩක් වෙලාවට පාවිච්චි කරන plot වර්ග කීපයක් තියෙනවා. මේවා එකිනෙකට වෙනස් දත්ත වර්ග සඳහා සහ වෙනස් අරමුණු සඳහා වඩාත් සුදුසුයි. අපි ඒවා එකින් එක බලමු.

Line Plots (රේඛා ප්‍රස්ථාර)

Line plots කියන්නේ කාලයත් එක්ක සිදුවන වෙනස්වීම් (trends over time) හෝ අඛණ්ඩ දත්ත (continuous data) වල රටා පෙන්වන්න ගොඩක් හොඳ plot එකක්. උදාහරණයක් විදියට, මාස කීපයක් ඇතුළත වෙළඳපොලේ කොටස් මිලක වෙනස්වීම්, උෂ්ණත්වයේ වෙනස්වීම්, හෝ රටක GDP වර්ධනය වගේ දේවල් පෙන්වන්න line plots පාවිච්චි කරන්න පුළුවන්. මේවායේ X-අක්ෂය බොහෝ විට කාලය හෝ අනුපිළිවෙල (sequence) නියෝජනය කරන අතර, Y-අක්ෂය අගය නියෝජනය කරයි.

Matplotlib වල line plot එකක් හදන්න `plt.plot()` කියන function එක පාවිච්චි කරනවා.

# Data නිර්මාණය කරමු - Pandas DataFrame එකක් ලෙස
data = {
    'මාසය': ['ජනවාරි', 'පෙබරවාරි', 'මාර්තු', 'අප්‍රේල්', 'මැයි', 'ජූනි'],
    'විකුණුම්': [100, 120, 110, 150, 130, 160]
}
df_sales = pd.DataFrame(data)

# Line plot එකක් හදමු
plt.figure(figsize=(10, 6)) # Plot එකේ ප්‍රමාණය සකසමු (අඟල් වලින්)
plt.plot(df_sales['මාසය'], df_sales['විකුණුම්'], marker='o', linestyle='-', color='blue')
plt.title('මාසික විකුණුම් ප්‍රස්ථාරය', fontsize=16, color='darkgreen')
plt.xlabel('මාසය', fontsize=12)
plt.ylabel('විකුණුම් ප්‍රමාණය', fontsize=12)
plt.grid(True, linestyle='--', alpha=0.7) # Grid එකක් එකතු කරමු, alpha මගින් විනිවිදභාවය
plt.tight_layout() # ලේබල් එකිනෙක මත ඇතිවීම වැලැක්වීමට
plt.show() # Plot එක display කිරීමට

මෙහිදී:

  • `marker='o'` මගින් data points රවුම් වලින් සලකුණු කරයි.
  • `linestyle='-'` මගින් රේඛාවේ ස්වභාවය (solid line) දක්වයි.
  • `color='blue'` මගින් රේඛාවේ වර්ණය නිල් පැහැයට සකසයි.
  • `plt.title()`, `plt.xlabel()`, `plt.ylabel()` මගින් ප්‍රස්ථාරයේ ශීර්ෂය සහ අක්ෂ වලට නම් ලබාදේ.
  • `plt.grid(True)` මගින් background grid lines එකතු කරයි.
  • `plt.show()` කියන function එක අත්‍යවශ්‍යයි, මොකද මේකෙන් තමයි අපේ plot එක screen එකේ display වෙන්නේ.

Bar Plots (තීරු ප්‍රස්ථාර)

Bar plots කියන්නේ විවිධ categories අතර සංසන්දනයන් (comparisons between different categories) හෝ විවික්ත දත්ත (discrete data) පෙන්වන්න ගොඩක් හොඳයි. උදාහරණයක් විදියට, විවිධ නිෂ්පාදන වල විකුණුම් ප්‍රමාණයන්, විවිධ නගර වල ජනගහනය, හෝ විවිධ විෂයන් සඳහා සිසුන්ගේ ලකුණු වගේ දේවල්. Bar chart එකක එක් එක් bar එක category එකක් නියෝජනය කරන අතර, bar එකේ උස හෝ දිග එම category එකේ අගය නියෝජනය කරයි.

Bar plot එකක් හදන්න `plt.bar()` කියන function එක පාවිච්චි කරනවා.

# Data නිර්මාණය කරමු
data = {
    'නිෂ්පාදන': ['A', 'B', 'C', 'D'],
    'විකුණුම්_එකතුව': [250, 300, 180, 400]
}
df_products = pd.DataFrame(data)

# Bar plot එකක් හදමු
plt.figure(figsize=(8, 6))
plt.bar(df_products['නිෂ්පාදන'], df_products['විකුණුම්_එකතුව'], color=['skyblue', 'lightcoral', 'lightgreen', 'gold'])
plt.title('නිෂ්පාදන අනුව සම්පූර්ණ විකුණුම්', fontsize=16, color='darkred')
plt.xlabel('නිෂ්පාදනය', fontsize=12)
plt.ylabel('විකුණුම් එකතුව', fontsize=12)
plt.show()

මෙහිදී `plt.bar()` function එකට category names (X-axis) සහ ඒවාට අදාළ අගයන් (Y-axis) ලබා දෙනවා. `color` parameter එකෙන් bars වලට විවිධ වර්ණ දෙන්නත් පුළුවන්. මේකෙන් plots තව දුරටත් පැහැදිලි කරගන්න පුළුවන්. උදාහරණයක් විදියට, වැඩිම අගය තියෙන bar එකට වෙනස් වර්ණයක් දෙන්න පුළුවන්.

Scatter Plots (විසරණ ප්‍රස්ථාර)

Scatter plots කියන්නේ variables දෙකක් අතර තියෙන සම්බන්ධතාවය (relationship between two variables) බලන්න ගොඩක් හොඳ plot එකක්. උදාහරණයක් විදියට, කෙනෙක්ගේ අධ්‍යාපන මට්ටම සහ ආදායම අතර සම්බන්ධතාවය, හෝ ගෙයක ප්‍රමාණය සහ එහි මිල අතර සම්බන්ධතාවය වගේ දේවල්. මේකෙන් correlations, clusters (කණ්ඩායම්), outliers (අසාමාන්‍ය දත්ත) වගේ දේවල් identify කරන්න පුළුවන්. මේ plots continuous numerical data සඳහා වඩාත් සුදුසුයි.

Scatter plot එකක් හදන්න `plt.scatter()` කියන function එක පාවිච්චි කරනවා.

# Data නිර්මාණය කරමු
# සසම්භාවී දත්ත (random data) භාවිතයෙන් උදාහරණය
np.random.seed(42) # ප්‍රතිඵල ස්ථාවරව තියාගන්න (reproducibility)
x_data = np.random.rand(50) * 100 # 0-100 අතර අගයන් 50ක්
y_data = 2 * x_data + np.random.randn(50) * 50 + 10 # යම් සම්බන්ධයක් ඇතිවන ලෙස + noise

df_scatter = pd.DataFrame({'X අගය': x_data, 'Y අගය': y_data})

# Scatter plot එකක් හදමු
plt.figure(figsize=(9, 7))
plt.scatter(df_scatter['X අගය'], df_scatter['Y අගය'], color='purple', alpha=0.7, s=50, edgecolors='black') # s මගින් point ප්‍රමාණය, alpha මගින් විනිවිදභාවය
plt.title('X සහ Y අගයන් අතර සම්බන්ධතාවය', fontsize=16, color='darkblue')
plt.xlabel('X අගය', fontsize=12)
plt.ylabel('Y අගය', fontsize=12)
plt.grid(True, linestyle=':', alpha=0.6)
plt.show()

මෙහිදී `plt.scatter()` function එකට X-axis සහ Y-axis අගයන් ලබා දෙනවා. `alpha` parameter එකෙන් points වල විනිවිදභාවය (transparency) පාලනය කරන්න පුළුවන්. Points එකිනෙක මත ඇති විට ඒවා හඳුනා ගැනීමට එය උපකාරී වේ. `s` parameter එකෙන් point වල ප්‍රමාණය පාලනය කරන්න පුළුවන්. `edgecolors='black'` මගින් එක් එක් point එක වටා කළු දාරයක් එකතු කරයි, එය points වඩාත් පැහැදිලිව පෙනීමට උපකාරී වේ.

Plots Customize කරමු

අපි දැන් මූලික plot වර්ග හදන්න ඉගෙන ගත්තා. හැබැයි, ලස්සන, තේරුම්ගන්න පහසු plot එකක් හදන්න නම්, ඒවා customize කරන එක ගොඩක් වැදගත්. Matplotlib වල මේකට ගොඩක් options තියෙනවා. මේවා භාවිතයෙන් අපිට plot එකේ පෙනුම සහ පැහැදිලිභාවය වැඩි කරගන්න පුළුවන්.

Labels, Titles, සහ Legends

  • Title (ශීර්ෂය): `plt.title()` මගින් plot එකට නමක් දෙන්න පුළුවන්. මේකෙන් plot එකෙන් කියවෙන දේ පැහැදිලි වෙනවා. මාතෘකාව හැකි තරම් කෙටි සහ පැහැදිලි විය යුතුයි.
  • Labels (ලේබල්): `plt.xlabel()` සහ `plt.ylabel()` මගින් X-අක්ෂයට හා Y-අක්ෂයට නම් දෙන්න පුළුවන්. මේකෙන් අක්ෂ වල තියෙන දත්ත මොනවද කියලා පැහැදිලි වෙනවා. ඒ වගේම, ඒ දත්ත වල ඒකක (units) මොනවද කියන එකත් සඳහන් කරන එක හොඳ පුරුද්දක්.
  • Legend (පුරාවෘත්තය): Plot එකක line හෝ bar වර්ග කීපයක් තියෙනවා නම්, ඒ එක් එක් එකෙන් නියෝජනය වෙන්නේ මොනවද කියලා කියන්න legend එකක් අවශ්‍යයි. `plt.legend()` මගින් legend එකක් එකතු කරන්න පුළුවන්. හැබැයි, plot කරනකොට `label` parameter එක use කරලා එක් එක් series එකට නමක් දෙන්න ඕනේ.
# Data
years = [2018, 2019, 2020, 2021, 2022, 2023]
company_a_sales = [150, 180, 200, 220, 250, 280] # මිලියන වලින්
company_b_sales = [100, 110, 130, 160, 190, 210] # මිලියන වලින්

plt.figure(figsize=(12, 7))
plt.plot(years, company_a_sales, marker='o', linestyle='-', color='green', label='පළමු සමාගම (Company A)')
plt.plot(years, company_b_sales, marker='x', linestyle='--', color='red', label='දෙවන සමාගම (Company B)')

plt.title('වසරින් වසර සමාගම් දෙකක විකුණුම් ප්‍රවණතාවය', fontsize=18, color='navy')
plt.xlabel('වසර', fontsize=14)
plt.ylabel('විකුණුම් ($ මිලියන)', fontsize=14) # ඒකකයක් එකතු කර ඇත
plt.legend(fontsize=12, loc='upper left') # legend එකේ පිහිටීම
plt.grid(True, linestyle=':', alpha=0.8)
plt.xticks(years) # X අක්ෂයේ tick mark හැම වසරකටම පෙන්වයි
plt.yticks(np.arange(0, 301, 50)) # Y අක්ෂයේ tick marks 0 සිට 300 දක්වා 50න් 50ට පෙන්වයි
plt.ylim(0, 300) # Y අක්ෂයේ පරාසය 0 සිට 300 දක්වා සකසයි
plt.tight_layout()
plt.show()

මෙම උදාහරණයේදී, `label` parameter එක භාවිතයෙන් එක් එක් line එකට නමක් දී ඇති අතර, `plt.legend()` මගින් එම නම් සහිත legend එක plot එකට එකතු කර ඇත. `loc` parameter එක මගින් legend එකේ පිහිටීම පාලනය කළ හැක. `plt.xticks()` සහ `plt.yticks()` මගින් අක්ෂ වල tick marks (සලකුණු) පාලනය කළ හැක. `plt.ylim()` මගින් Y-අක්ෂයේ පරාසය (minimum and maximum values) නියම කර ඇත, එය දත්ත වඩා හොඳින් නිරූපණය කිරීමට උපකාරී වේ.

වර්ණ, Markers, Line Styles සහ අනෙකුත්

Plots තවත් ආකර්ශනීය කරන්න අපිට වර්ණ (colors), markers, line styles වගේ දේවල් පාවිච්චි කරන්න පුළුවන්. මේවා ඔබේ දත්ත වලට අමතර තේරුමක් දෙන්නත්, plot එක වඩාත් කියවීමට පහසු කරන්නත් පුළුවන්.

  • `color`: plot එකේ වර්ණය වෙනස් කරන්න. (e.g., `'red'`, `'blue'`, `'#FF5733'` - hex codes)
  • `marker`: data points සලකුණු කරන්න. (e.g., `'o'` (circle), `'x'` (x mark), `'s'` (square), `'^'` (triangle))
  • `linestyle`: රේඛාවේ ස්වභාවය වෙනස් කරන්න. (e.g., `'-'` (solid), `'--'` (dashed), `'-.'` (dash-dot), `':'` (dotted))
  • `linewidth`: රේඛාවේ ඝනකම.
  • `markersize`: marker වල ප්‍රමාණය.
  • `alpha`: plot එකේ විනිවිදභාවය (transparency). 0 (fully transparent) සිට 1 (fully opaque) දක්වා අගයක්. දත්ත points ගොඩක් එකිනෙක මත ඇති විට මෙය ඉතා ප්‍රයෝජනවත්.
  • `fontsize`: title, label, legend වල අකුරු ප්‍රමාණය පාලනය කිරීමට.
  • `rotation`: X-අක්ෂයේ labels කරකවන්න. (උදා: `plt.xticks(rotation=45)`)
# Data
temperatures = [25, 26, 24, 27, 28, 26, 25, 29, 30, 28]
days = range(1, 11)

plt.figure(figsize=(10, 6))
plt.plot(days, temperatures, color='#8A2BE2', marker='^', linestyle='-.', linewidth=2, markersize=8, label='දෛනික උෂ්ණත්වය') # Purple color
plt.title('දින 10ක උෂ්ණත්ව වෙනස්වීම්', fontsize=16)
plt.xlabel('දිනය', fontsize=12)
plt.ylabel('උෂ්ණත්වය (°C)', fontsize=12)
plt.grid(True, alpha=0.6)
plt.legend()
plt.xticks(days) # හැම දවසකටම tick එකක්
plt.show()

මෙහිදී, `linewidth` මගින් රේඛාවේ ඝනකම සහ `markersize` මගින් marker වල ප්‍රමාණය පාලනය කර ඇත. `color` එකට hex code එකක් පාවිච්චි කරලා තියෙනවා. මේ වගේ parameter ගොඩක් පාවිච්චි කරලා ඔයාගේ plot එකට අවශ්‍ය පෙනුම ලබාගන්න පුළුවන්.

Figure සහ Axes අවබෝධ කරගනිමු

Matplotlib වල plot එකක් හදනකොට, ඇත්තටම "figure" එකක් සහ "axes" එකක් කියන concepts දෙකක් තේරුම් ගන්න එක ගොඩක් වැදගත්. මේක තේරුම් ගත්තාම, වඩාත් සංකීර්ණ plots හදන්න, එකම figure එකක plots කීපයක් පෙන්නන්න වගේ දේවල් කරන්න පුළුවන්. මේක තමයි Matplotlib වල object-oriented approach එකේ මූලිකම පදනම.

Figure (රූපය)

`Figure` එකක් කියන්නේ ඔයාගේ plot එක පෙන්නන මුළු window එක, නැත්නම් page එක. ඒක තමයි plot එකේ "canvas" එක. ඔයාට figure එකේ ප්‍රමාණය (size), පසුබිම් වර්ණය (background color) වගේ දේවල් පාලනය කරන්න පුළුවන්. එක Figure එකක plots එකක් හෝ කීපයක් අඩංගු වෙන්න පුළුවන්. `plt.figure()` function එකෙන් Figure object එකක් හදාගන්න පුළුවන්.

Axes (අක්ෂ)

`Axes` කියන්නේ Figure එක ඇතුළේ plot එක ඇත්තටම අඳින කොටස. ඒක තමයි X-අක්ෂයයි, Y-අක්ෂයයි තියෙන අපේ "ග්‍රාෆ් කඩදාසිය". එක figure එකක axes එකක් හෝ කීපයක් තියෙන්න පුළුවන් (මේවා අපි subplots කියලා හඳුන්වනවා). `Axes` object එකට තමයි title, xlabel, ylabel, legend, plot data වගේ දේවල් අයිති වෙන්නේ. කලින් අපි `plt.title()` වගේ functions use කරලා plot එක customize කළා. ඒවා ඇත්තටම Matplotlib විසින් ස්වයංක්‍රීයව පවත්වාගෙන යන `current axes` එකට තමයි apply වෙන්නේ. නමුත් object-oriented approach එකේදී අපි කෙලින්ම `Axes` object එකේ methods (e.g., `ax.set_title()`, `ax.plot()`) භාවිත කරනවා.

Figure සහ Axes එකට භාවිත කරමු: subplots()

Plots හදනකොට `plt.subplots()` function එක පාවිච්චි කරන එක හොඳ පුරුද්දක්. මේකෙන් අපිට එකවර figure එකක් සහ එකක් හෝ ඊට වැඩි axes objects හදාගන්න පුළුවන්. මේකෙන් අපේ plot එකට වඩා හොඳින් control එකක් ලැබෙනවා වගේම, code එක වඩාත් පැහැදිලි සහ සංවිධානාත්මක වෙනවා.

fig, ax = plt.subplots(figsize=(10, 6))
  • `fig` කියන්නේ `Figure` object එක.
  • `ax` කියන්නේ `Axes` object එක (එක plot එකක් නම්).
  • `ax` object එකට තමයි අපි `set_title()`, `set_xlabel()`, `set_ylabel()`, `plot()`, `bar()`, `scatter()` වගේ methods apply කරන්නේ.
# Data
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May']
income = [300, 320, 310, 350, 340]
expenses = [180, 190, 170, 200, 195]

# Figure එකක් සහ Axes එකක් හදාගමු
fig, ax = plt.subplots(figsize=(10, 6)) # Figure size එක මෙතනින් සකසන්න පුළුවන්

# Axes object එක භාවිතයෙන් plots අඳිමු
ax.plot(months, income, marker='o', label='ආදායම (Income)', color='green')
ax.plot(months, expenses, marker='x', label='වියදම් (Expenses)', color='red', linestyle='--')

# Axes object එක භාවිතයෙන් customizations කරමු
ax.set_title('මාසික ආදායම් සහ වියදම්', fontsize=18, color='darkblue')
ax.set_xlabel('මාසය', fontsize=14)
ax.set_ylabel('මුදල ($)', fontsize=14)
ax.legend(fontsize=12)
ax.grid(True, linestyle=':', alpha=0.7)

plt.tight_layout()
plt.show()

මේ උදාහරණයේදී, අපි `ax` කියන `Axes` object එක හරහාම සියලුම plot කිරීම් සහ customization සිදු කර ඇත. මේක ගොඩක් හොඳ පුරුද්දක්, විශේෂයෙන් එක Figure එකක් තුළ plots කීපයක් හදනකොට (subplots). උදාහරණයක් විදියට, එක Figure එකක් තුළ plots දෙකක් පැත්තකින් පැත්තට (1 row, 2 columns) හදන්න ඕනේ නම්, අපි `fig, axs = plt.subplots(1, 2, figsize=(12, 5))` කියලා දෙනවා. එතකොට `axs` කියන්නේ array එකක් විදියට එනවා. `axs[0]`, `axs[1]` වගේ use කරලා ඒ අදාල plot එකට customization කරන්න පුළුවන්.

# Subplots උදාහරණයක්
fig, axs = plt.subplots(1, 2, figsize=(14, 6)) # එක් පේළියක plots දෙකක්

# පළමු subplot එක
axs[0].plot(months, income, marker='o', color='green')
axs[0].set_title('මාසික ආදායම')
axs[0].set_xlabel('මාසය')
axs[0].set_ylabel('ආදායම ($)')
axs[0].grid(True)

# දෙවන subplot එක
axs[1].bar(months, expenses, color='red')
axs[1].set_title('මාසික වියදම්')
axs[1].set_xlabel('මාසය')
axs[1].set_ylabel('වියදම් ($)')
axs[1].grid(True)

plt.tight_layout() # plots අතර ඉඩකඩ ස්වයංක්‍රීයව සකසයි
plt.show()

මේ වගේ `plt.subplots()` භාවිතයෙන් figure සහ axes පාලනය කරන එකෙන් ඔයාට Data Visualization වලදී උපරිම නම්‍යශීලී බවක් ලැබෙනවා.

හොඳම පුරුදු සහ Troubleshooting

දත්ත දෘශ්‍යකරණය කියන්නේ හුදෙක් charts අඳින එකට වඩා එහා ගිය දෙයක්. ඒක කලාවක් වගේම විද්‍යාවක්. හොඳ Data Visualization එකකින් සංකීර්ණ දත්ත සරල කරන අතර, වැරදි Visualization එකකින් පාඨකයා නොමඟ යවන්න පුළුවන්. ඒ නිසා, charts හදනකොට මතක තියාගන්න ඕන හොඳම පුරුදු (best practices) කීපයක් සහ පොදු ගැටළු වලට විසඳුම් කීපයක් බලමු.

හොඳම පුරුදු (Best Practices)

  1. නිවැරදි Plot වර්ගය තෝරාගන්න (Choose the Right Plot Type):
    • කාලයත් සමඟ වෙනස්වීම් (Trends over time): Line plots.
    • Categories සංසන්දනය (Categorical comparisons): Bar plots.
    • Variables දෙකක් අතර සම්බන්ධතාවය (Relationship between two variables): Scatter plots.
    • කොටස් (Proportions of a whole): Pie charts (නමුත් Bar charts හෝ Stacked Bar charts ගොඩක් වෙලාවට වඩා හොඳයි, විශේෂයෙන් segments ගොඩක් තියෙනවා නම්).
  2. පැහැදිලි ලේබල් සහ මාතෘකා (Clear Labels and Titles): Plot එකෙන් මොකක්ද කියවෙන්නේ කියලා එක බැල්මෙන් තේරෙන්න ඕනේ. X සහ Y අක්ෂ වලට පැහැදිලි නම් සහ ඒකක දෙන්න. Plot එකට අදාළ, තේරුම්ගන්න පහසු මාතෘකාවක් දෙන්න. අකුරු ප්‍රමාණය (fontsize) කියවීමට පහසු විය යුතුයි.
  3. Legend එකක් එකතු කරන්න (Add a Legend): Lines හෝ bars කීපයක් තියෙනවා නම්, ඒ එක් එක් එකෙන් නියෝජනය වෙන්නේ මොනවද කියලා legend එකකින් පැහැදිලි කරන්න. Legend එක පැහැදිලිව පෙනෙන තැනක තියන්න.
  4. සරලව තියාගන්න (Keep it Simple - Data-Ink Ratio): අනවශ්‍ය විස්තර, වර්ණ හෝ effects වලින් plot එක අවුල් කරන්න එපා. "Data-ink ratio" කියන concept එක මතක තියාගන්න. එනම්, plot එකේ දත්ත පෙන්වන ink ප්‍රමාණය උපරිම විය යුතු අතර, දත්ත නියෝජනය නොකරන අනවශ්‍ය ink ප්‍රමාණය අවම විය යුතුයි.
  5. වර්ණ ඥානවන්තව භාවිතා කරන්න (Use Colors Wisely): වර්ණ පාවිච්චි කරනකොට, ඒකෙන් දත්ත වලට අමතර තේරුමක් ලැබෙනවාද කියලා බලන්න. උදාහරණයක් ලෙස, එකිනෙකට වෙනස් categories සඳහා වෙනස් වර්ණ, හෝ අගයක වර්ධනයක් (green) සහ අඩුවීමක් (red) පෙන්වීමට වර්ණ පාවිච්චි කරන්න පුළුවන්. Colorbrewer, Coolors වගේ online tools පාවිච්චි කරන්න පුළුවන්. වර්ණ අන්ධභාවය (colorblindness) ඇති අයටත් plot එක තේරුම්ගන්න පුළුවන් වර්ණ පලත් (palettes) තෝරාගන්න පුරුදු වෙන්න.
  6. අක්ෂ වල පරාසය (Axis Limits): සමහර වෙලාවට Y-අක්ෂය 0 (zero) වලින් පටන් ගන්න එක ගොඩක් වැදගත්. එහෙම නැති වුණොත්, පොඩි වෙනසක් වුණත් ලොකු වෙනසක් වගේ පෙනෙන්න පුළුවන්, එය පාඨකයා නොමඟ යැවීමට පුළුවන්. `ax.set_ylim(min_val, max_val)` වගේ methods පාවිච්චි කරන්න.
  7. Subplots භාවිතය (Using Subplots for Comparison): Plots කීපයක් සංසන්දනය කරනවා නම්, ඒවා එක figure එකක, එකම scale එකක් තියාගෙන (subplots) පෙන්නන එක හොඳයි. මේකෙන් පාඨකයාට plots අතර සංසන්දනයක් කිරීම පහසු වෙනවා.
  8. Plots save කිරීම (Saving Plots): ඔයාගේ plot එක පින්තූරයක් විදියට save කරගන්න `plt.savefig('my_plot.png')` වගේ command එකක් use කරන්න. විවිධ formats (PNG, JPG, PDF, SVG) වලින් save කරන්න පුළුවන්.

Troubleshooting (ගැටළු විසඳීම)

  • Plot එක පෙන්නන්නේ නෑ (Plot Not Displaying):
    • හොඳටම මතක තියාගන්න `plt.show()` නැත්නම් `fig.show()` (object-oriented approach) අන්තිමට දාන්න ඕනේ. Plot එකක් generate වුණාට ඒක display වෙන්නේ මේ function එකෙන්.
    • Jupyter Notebooks හෝ IPython environments වලදී `plt.show()` නැති වුණත් plot එක display වෙන්න පුළුවන්, නමුත් stand-alone Python scripts වලදී එය අත්‍යවශ්‍යයි.
  • ලේබල් සහ මාතෘකා එකිනෙක මත ඇතිවීම (Overlapping Labels/Titles):
    • `plt.tight_layout()` function එක පාවිච්චි කරන්න. මේකෙන් plots සහ elements අතර ඇති ඉඩකඩ ස්වයංක්‍රීයව සකසනවා.
    • `figsize` එක වැඩි කරන්න.
    • `plt.xticks(rotation=angle)` මගින් X-අක්ෂයේ ලේබල් කරකවන්න පුළුවන්.
  • දත්ත වැරදියට පෙන්වීම (Incorrect Data Display):
    • ඔයාගේ දත්ත (DataFrame) නිවැරදිද කියලා නැවත බලන්න.
    • X-අක්ෂය සහ Y-අක්ෂය සඳහා නිවැරදි column තෝරාගෙන තියෙනවද කියලා බලන්න.
    • Data types නිවැරදිද කියලා බලන්න (e.g., numerical data for numerical axes).
  • Syntax Errors (කේතයේ දෝෂ):
    • Python error messages කියවන්න පුරුදු වෙන්න. ඒවායෙන් දෝෂය තියෙන්නේ කොතැනද කියලා ගොඩක් වෙලාවට කියනවා.
    • Function names, parameter names නිවැරදිද කියලා දෙවරක් පරීක්ෂා කරන්න. Case-sensitivity මතක තියාගන්න.
    • Stack Overflow වගේ වෙබ් අඩවි වලට ගිහින් ඔයාට ආපු error එක search කරන්න. ගොඩක් වෙලාවට විසඳුමක් හොයාගන්න පුළුවන්.

මතක තියාගන්න, Data Visualization කියන්නේ practice කරන තරමට දියුණු වෙන skill එකක්. ඉතින්, බය නැතුව code කරලා බලන්න, අත්හදා බලන්න! Matplotlib වල documentation එක කියවන එකත් ගොඩක් ප්‍රයෝජනවත්.

නිගමනය (Conclusion)

ඉතින් යාළුවනේ, අපි මේ ලිපියෙන් Matplotlib භාවිතයෙන් Python වල Data Visualization කරන හැටි මුල ඉඳන්ම ඉගෙන ගත්තා. Line plots, Bar plots, Scatter plots වගේ මූලික plot වර්ග හදන හැටි, ඒවා ලස්සනට customize කරන හැටි, ඒ වගේම Figure සහ Axes කියන concepts දෙකත් පැහැදිලිව තේරුම් ගත්තා. අන්තිමට, හොඳම පුරුදු (best practices) සහ පොදු ගැටළු වලට විසඳුම් (troubleshooting tips) ටිකකුත් අපි සාකච්ඡා කළා.

දැන් ඔයාට පුළුවන් ඔයාගේම Data Visualization project එකක් පටන් ගන්න. ලොකු දත්ත ගොඩක් තේරුම්ගන්න පුළුවන්, ලස්සන plots වලට හරවන එක ගොඩක් විනෝදජනක සහ ප්‍රයෝජනවත් දෙයක්. මේක Data Science වලට පිවිසෙන්න හොඳ පදනමක්. Matplotlib වලින් ඔයාට ඕනම දත්ත කට්ටලයක් (dataset) විස්තරාත්මකව විශ්ලේෂණය කරන්න සහ ඔයාගේ insights අනිත් අයට පහසුවෙන් ඉදිරිපත් කරන්න පුළුවන්.

මේ ලිපියේ කේත කොටස් ඔයාගේ computer එකේ run කරලා බලන්න. වෙනස්කම් කරලා බලන්න. ඔයා හදපු plots මොනවාද? ඒවායෙන් මොනවද ඔයාට ඉගෙන ගන්න ලැබුණේ? ඒ ගැන අදහස් පහළ comment section එකේ අපිට කියන්න. අනිවාර්යයෙන්ම ඔයාගේ අත්දැකීම් බෙදාගන්න. මේ වගේ තවත් ලිපි ඕනේ නම් ඒකත් කියන්න!

Data Visualization වල ගමනට සුභ පතනවා! ගිහින් එන්නම්!