FA-TOOLS — Header Component

رسم نمودار با Matplotlib — کدهای آماده کامل برای هر نیاز بصری

🎨 نقشه راه شما برای تسلط بر Matplotlib در یک نگاه 📊

🚀 شروع سریع

  • نصب و آماده‌سازی
  • اولین نمودار ساده

📈 انواع نمودارها

  • خطی، پراکنده (Scatter)
  • میله‌ای، هیستوگرام
  • دایره‌ای (Pie), جعبه‌ای (Box)
  • سه‌بعدی و تخصصی

✨ شخصی‌سازی

  • عنوان، محورها، légende
  • رنگ‌ها، استایل‌ها، مارکرها
  • چندین نمودار در یک شکل

🛠️ کدهای آماده و نکات

  • اسنیپت‌های پرکاربرد
  • ذخیره و نمایش نمودارها
  • حل مشکلات رایج

رفیق برنامه‌نویس، امروز می‌خوایم غرق بشیم تو دنیای Matplotlib، همون کتابخونه خفن پایتون که بدون اون، مصور کردن داده‌ها مثلآ رانندگی بدون فرمون می‌مونه! چه تازه کار باشی، چه یه پا استادی، اینجا کلی کد آماده و ترفند کاربردی پیدا می‌کنی که کارتو راه بندازه. اگه دنبال ابزارهای حرفه‌ای‌تر یا کدهای آماده پایتون می‌گردی که پروژه‌هات رو برق بندازه، حتماً یه سری به سایت ما بزن. ما تو بخش اسنیپت‌ها کلی چیز باحال برات آماده کردیم.

Matplotlib چیه و چرا باید ازش استفاده کنیم؟

رسم نمودار با matplotlib — کدهای آماده کامل — تصویر 2

Matplotlib یه کتابخونه جامع و قدرتمند برای پایتونه که بهت اجازه میده انواع و اقسام نمودارها رو، از ساده‌ترین تا پیچیده‌ترین‌شون، رسم کنی. فکر کن یه بوم نقاشی دیجیتال داری که با کد نویسی، هر تصویری که بخوای از داده‌هات می‌تونی روش بکشی. از تحلیل داده‌های علمی و مالی گرفته تا ساخت داشبوردهای مدیریتی، Matplotlib همیشه دستت رو می‌گیره. سادگی در شروع کار و انعطاف‌پذیری بی‌نهایت برای شخصی‌سازی، اونو تبدیل به یک ابزار ضروری برای هر برنامه‌نویسی کرده که با داده‌ها سروکار داره.

💡 یه نکته دوستانه: یادگیری Matplotlib فقط برای تحلیلگرهای داده نیست. حتی اگه تو حوزه‌های مثل توسعه وب با پایتون یا یادگیری ماشین کار می‌کنی، نمایش بصری نتایج می‌تونه کلی بهت کمک کنه تا کارتو بهتر درک و ارائه بدی.

شروع کار با Matplotlib: نصب و اولین نمودار

رسم نمودار با matplotlib — کدهای آماده کامل — تصویر 3

مثل همیشه، قبل از هرچیزی باید کتابخونه رو نصب کنیم. بعدشم میریم سراغ ساده‌ترین نمودار: یه نمودار خطی.

نصب Matplotlib

اگه پایتون رو نصب داری، با pip به راحتی می‌تونی Matplotlib رو اضافه کنی:


pip install matplotlib
    

اگه از محیط‌های مجازی (virtual environments) استفاده می‌کنی، حواست باشه که تو محیط فعلی نصبش کنی.

اولین نمودار خطی ساده

حالا که نصب شده، بیا یه نمودار خطی ساده برای دیدن روند یه سری داده رسم کنیم:


import matplotlib.pyplot as plt

# داده‌های نمونه
x = [1, 2, 3, 4, 5]
y = [2, 4, 1, 5, 2]

# رسم نمودار خطی
plt.plot(x, y)

# اضافه کردن عنوان و برچسب محورها
plt.title("اولین نمودار خطی من")
plt.xlabel("محور X")
plt.ylabel("محور Y")

# نمایش نمودار
plt.show()
    

این کد یه پنجره باز می‌کنه و نمودار خطی ساده‌ای رو با داده‌های `x` و `y` نشون میده. `plt.show()` کلید نمایش نموداره، وگرنه فقط آماده میشه و نشون داده نمیشه.

انواع نمودارها در Matplotlib و کدهای آماده آن‌ها

Matplotlib دستت رو برای رسم انواع نمودارها حسابی باز میذاره. بیا چندتا از پرکاربردترین‌ها رو با هم ببینیم.

1. نمودار پراکنده (Scatter Plot)

برای نشون دادن رابطه بین دو متغیر، نمودار پراکنده عالیه. هر نقطه نشون‌دهنده یک جفت از داده‌هاته.


import matplotlib.pyplot as plt
import numpy as np

# داده‌های تصادفی
np.random.seed(42) # برای نتایج قابل تکرار
x = np.random.rand(50) * 10
y = np.random.rand(50) * 10
colors = np.random.rand(50) # رنگ بر اساس یه متغیر سوم
sizes = np.random.rand(50) * 100 # اندازه بر اساس یه متغیر چهارم

plt.scatter(x, y, c=colors, s=sizes, alpha=0.7, cmap='viridis')
plt.title("نمودار پراکنده با رنگ و اندازه متفاوت")
plt.xlabel("متغییر X")
plt.ylabel("متغیر Y")
plt.colorbar(label="میزان C") # اضافه کردن راهنمای رنگ
plt.show()
    

همین الان می‌تونی این کد رو تو اسنیپت‌های پایتون ما پیدا کنی و استفاده کنی!

2. نمودار میله‌ای (Bar Chart)

برای مقایسه مقادیر بین دسته‌بندی‌های مختلف، نمودار میله‌ای بهترین انتخابه.


import matplotlib.pyplot as plt

دسته_بندی_ها = ['A', 'B', 'C', 'D']
مقادیر = [23, 45, 56, 12]

plt.bar(دسته_بندی_ها, مقادیر, color=['skyblue', 'lightcoral', 'lightgreen', 'gold'])
plt.title("نمودار میله‌ای مقایسه‌ای")
plt.xlabel("دسته‌بندی‌ها")
plt.ylabel("مقادیر")
plt.show()
    

3. هیستوگرام (Histogram)

وقتی می‌خوای توزیع یک متغیر پیوسته رو ببینی، هیستوگرام به کارت میاد.


import matplotlib.pyplot as plt
import numpy as np

# داده‌های تصادفی با توزیع نرمال
data = np.random.normal(loc=0, scale=1, size=1000) # میانگین 0، انحراف معیار 1

plt.hist(data, bins=30, color='teal', alpha=0.7) # bins تعداد ستون‌ها رو مشخص می‌کنه
plt.title("هیستوگرام توزیع داده‌ها")
plt.xlabel("مقادیر")
plt.ylabel("تعداد فراوانی")
plt.grid(axis='y', alpha=0.75) # اضافه کردن خطوط راهنما
plt.show()
    

4. نمودار دایره‌ای (Pie Chart)

برای نشون دادن نسبت هر قسمت به کل، نمودار دایره‌ای گزینه خوبیه.


import matplotlib.pyplot as plt

labels = ['سیب', 'موز', 'پرتقال', 'انگور']
sizes = [15, 30, 45, 10]
explode = (0, 0.1, 0, 0) # جدا کردن یه قسمت برای تاکید

fig1, ax1 = plt.subplots()
ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',
        shadow=True, startangle=90, colors=['gold', 'yellowgreen', 'lightcoral', 'lightskyblue'])
ax1.axis('equal')  # تضمین می‌کند که دایره به صورت یک پارچه کشیده شود.

plt.title("توزیع میوه‌ها")
plt.show()
    

5. نمودار جعبه‌ای (Box Plot)

برای دیدن توزیع، چارک‌ها، میانه و داده‌های پرت (outliers) یه مجموعه داده، نمودار جعبه‌ای خیلی مفیده.


import matplotlib.pyplot as plt
import numpy as np

# داده‌های چند گروه
data_group1 = np.random.normal(loc=100, scale=10, size=100)
data_group2 = np.random.normal(loc=90, scale=20, size=100)
data_group3 = np.random.normal(loc=110, scale=5, size=100)

data_to_plot = [data_group1, data_group2, data_group3]

plt.boxplot(data_to_plot, patch_artist=True,
            boxprops=dict(facecolor='lightblue', color='blue'),
            medianprops=dict(color='red'))
plt.title("نمودار جعبه‌ای برای مقایسه توزیع گروه‌ها")
plt.xlabel("گروه‌ها")
plt.ylabel("مقادیر")
plt.xticks([1, 2, 3], ['گروه 1', 'گروه 2', 'گروه 3']) # نامگذاری محور x
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.show()
    

شخصی‌سازی و زیبایی نمودارها

تا اینجا نمودارهای خام رو دیدیم. حالا نوبت اینه که یاد بگیریم چطور اونها رو زیباتر و خواناتر کنیم. Matplotlib کلی آپشن برای شخصی‌سازی داره.

✅ بهینه‌سازی برای موبایل و تبلت: یادت باشه که نمودارهات باید روی هر دستگاهی خوب دیده بشن. Matplotlib به صورت پیش‌فرض خروجی نسبتاً رسپانسیو می‌ده، اما استفاده از `plt.tight_layout()` می‌تونه کمک کنه تا فاصله‌ها بهتر تنظیم بشن و چیزی از کادر بیرون نزنه.

تنظیم عنوان، برچسب‌ها و Legend

این‌ها ابتدایی‌ترین اما مهم‌ترین عناصر برای خوانایی نمودارن.


import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y1 = [10, 12, 8, 15, 7]
y2 = [5, 8, 12, 6, 10]

plt.plot(x, y1, label='سری داده 1', color='blue', linestyle='--', marker='o')
plt.plot(x, y2, label='سری داده 2', color='red', linestyle='-', marker='x')

plt.title("نمودار مقایسه دو سری داده", fontsize=16, color='darkgreen')
plt.xlabel("زمان (ساعت)", fontsize=12)
plt.ylabel("مقادیر", fontsize=12)

plt.legend(loc='upper right', fontsize=10) # اضافه کردن Legend
plt.grid(True, linestyle=':', alpha=0.6) # اضافه کردن گرید

plt.show()
    

کار با Subplots (چند نمودار در یک شکل)

گاهی اوقات لازمه چند نمودار رو کنار هم نشون بدی تا مقایسه راحت‌تر باشه. `subplots` اینجا به کمکت میاد.


import matplotlib.pyplot as plt
import numpy as np

# داده‌های نمونه
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.sin(x) * np.cos(x)

# ساخت یک شکل با دو ردیف و دو ستون
fig, axs = plt.subplots(2, 2, figsize=(10, 8)) # 2x2 زیرنمودار

# نمودار اول (بالا چپ)
axs[0, 0].plot(x, y1, color='purple')
axs[0, 0].set_title('نمودار سینوس')
axs[0, 0].set_ylabel('مقادیر')

# نمودار دوم (بالا راست)
axs[0, 1].scatter(x, y2, color='orange', s=10)
axs[0, 1].set_title('نمودار کسینوس')

# نمودار سوم (پایین چپ)
axs[1, 0].plot(x, y3, color='green', linewidth=2)
axs[1, 0].set_title('نمودار سینوس * کسینوس')
axs[1, 0].set_xlabel('محور X')
axs[1, 0].set_ylabel('مقادیر')

# نمودار چهارم (پایین راست) - خالی یا با داده‌های دیگر
axs[1, 1].text(0.5, 0.5, 'اینجا میتونیnنمودار دیگه ایnبذاری!',
              horizontalalignment='center', verticalalignment='center',
              fontsize=14, color='gray')
axs[1, 1].axis('off') # برای مخفی کردن محورها

plt.suptitle('چندین نمودار در یک شکل', fontsize=18, fontweight='bold')
plt.tight_layout(rect=[0, 0.03, 1, 0.95]) # تنظیم فاصله‌ها
plt.show()
    

نکات پیشرفته‌تر و کدهای آماده کاربردی

تا اینجا مبانی رو پوشش دادیم، حالا می‌خوایم بریم سراغ چندتا ترفند و کد آماده که نمودارهاتو یه لول بالاتر می‌بره. اگه به دنبال اسنیپت‌های وردپرس یا کدهای HTML هستی، اون‌ها رو هم تو بخش کدهای آماده سایتمون پیدا می‌کنی!

ذخیره نمودارها با کیفیت بالا

نموداری که با این همه زحمت کشیدی رو نباید فقط نشون بدی! باید بتونی با کیفیت بالا ذخیره‌اش کنی.


import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)

plt.plot(x, y)
plt.title("نمودار سینوس")
plt.xlabel("X")
plt.ylabel("sin(X)")

# ذخیره نمودار در فایل
# dpi: کیفیت و وضوح تصویر (Dots Per Inch)
# bbox_inches='tight': حذف فضاهای اضافی دور نمودار
plt.savefig('sine_wave.png', dpi=300, bbox_inches='tight')
plt.savefig('sine_wave.pdf', dpi=300, bbox_inches='tight') # برای خروجی وکتور
plt.show()
    

ذخیره به فرمت‌های PNG، JPG، PDF و SVG امکان‌پذیره. برای گزارشات و مقالات علمی، PDF یا SVG بهترن چون وکتوری هستن و با زوم کردن کیفیتشون کم نمیشه.

استفاده از Style Sheets

Matplotlib یه عالمه Style Sheet آماده داره که می‌تونی با یه خط کد، ظاهر نمودارهاتو کاملاً عوض کنی.


import matplotlib.pyplot as plt
import numpy as np

# لیست Style Sheet های موجود رو با این دستور می‌تونی ببینی:
# print(plt.style.available)

plt.style.use('ggplot') # انتخاب استایل ggplot

x = np.linspace(0, 10, 100)
y_sin = np.sin(x)
y_cos = np.cos(x)

plt.plot(x, y_sin, label='sin(x)')
plt.plot(x, y_cos, label='cos(x)')
plt.title("نمودار سینوس و کسینوس با استایل ggplot")
plt.xlabel("X")
plt.ylabel("Y")
plt.legend()
plt.show()

# می‌تونی استایل رو به حالت پیش‌فرض برگردونی
# plt.style.use('default')
    

استفاده از استایل‌ها نه تنها به سرعت ظاهری حرفه‌ای به نمودارهات می‌ده، بلکه باعث میشه یه یکپارچگی بصری (visual consistency) تو پروژه‌هات داشته باشی.

جدول مقایسه‌ای: Matplotlib در برابر رقبای محبوب

با اینکه Matplotlib خیلی قدرتمنده، رقبای دیگه‌ای هم تو اکوسیستم پایتون هستن. بیا یه مقایسه سریع داشته باشیم:

ویژگی Matplotlib
هدف اصلی کنترل کامل و دقیق بر هر جزء نمودار
سادگی استفاده اولیه متوسط؛ برای نمودارهای پایه آسان، برای شخصی‌سازی عمیق نیازمند کد بیشتر
گرافیک تعاملی پشتیبانی محدود (برای نیازهای تعاملی پیچیده‌تر، کتابخانه‌های دیگری مانند Plotly یا Bokeh بهترند)
قدرت شخصی‌سازی بسیار بالا؛ تقریباً هر چیزی را می‌توان تغییر داد و کنترل کرد

عیب‌یابی سریع (Troubleshooting)

حتماً تو مسیر کار با Matplotlib به مشکلاتی برمی‌خوری. نگران نباش، این طبیعیه! اینجا چندتا مشکل رایج و راه‌حلشون رو آوردم:

1. نمودار نمایش داده نمی‌شود یا پنجره بسته می‌شود

* **مشکل:** کد رو اجرا می‌کنی ولی نموداری نمی‌بینی یا پنجره سریعاً بسته میشه.
* **راه‌حل:** مطمئن شو که همیشه `plt.show()` رو در انتهای کدت داری. تو محیط‌های مثل Jupyter Notebook یا IPython، ممکنه بدون `plt.show()` هم نمایش داده بشه، ولی برای اسکریپت‌های پایتون عادی، این دستور ضروریه. اگه از IDE ای مثل PyCharm استفاده می‌کنی، ممکنه نیاز باشه تنظیمات backend Matplotlib رو تغییر بدی.

2. فونت فارسی در نمودارها به هم ریخته نمایش داده می‌شود

* **مشکل:** عنوان‌ها یا برچسب‌های محور که فارسی می‌نویسی، به صورت مربع یا حروف جدا از هم (مثل “رسم نمودار” به جای “نمودار رسم”) نمایش داده میشن.
* **راه‌حل:** Matplotlib به صورت پیش‌فرض فونت فارسی نداره. باید یه فونت فارسی رو بهش معرفی کنی. مثلآ می‌تونی این کد رو به ابتدای اسکریپتت اضافه کنی:


import matplotlib.pyplot as plt
import matplotlib.font_manager as fm

# مسیر فونت فارسی رو به سیستم خودت تغییر بده
# فونت‌های رایج فارسی: Shabnam, Vazirmatn, IranSans
font_path = '/usr/share/fonts/truetype/yekan/Yekan.ttf' # مثال برای لینوکس
# font_path = 'C:/Windows/Fonts/Arial.ttf' # مثال برای ویندوز (اگه یه فونت فارسی مثل Nazanin نصب کرده باشی)

# اضافه کردن فونت به Matplotlib
fm.fontManager.addfont(font_path)
plt.rcParams['font.family'] = fm.FontProperties(fname=font_path).get_name()
plt.rcParams['axes.unicode_minus'] = False # برای اینکه علامت منفی به درستی نمایش داده شود

# حالا می‌تونی متن فارسی بنویسی
# plt.title("نمودار من")
# plt.xlabel("محور X")
# plt.ylabel("محور Y")
    

اطمینان حاصل کن که `font_path` دقیقاً به فایل فونت `ttf` یا `otf` صحیح در سیستم شما اشاره می‌کند.

3. نمودارها خیلی شلوغ یا بهم ریخته به نظر می‌رسند

* **مشکل:** با حجم بالای داده‌ها یا چندین نمودار در یک شکل، نمودار ناخوانا میشه.
* **راه‌حل:**
* از `plt.tight_layout()` استفاده کن. این دستور به صورت خودکار فاصله‌های بین زیرنمودارها و حاشیه‌ها رو تنظیم می‌کنه.
* اندازه شکل (Figure size) رو بزرگتر کن: `plt.figure(figsize=(width, height))` یا `fig, ax = plt.subplots(figsize=(width, height))`.
* شفافیت (alpha) خطوط یا نقاط رو کم کن تا همپوشانی‌ها کمتر به چشم بیان.
* فقط اطلاعات ضروری رو روی نمودار نمایش بده و از شلوغ کردن با جزئیات زیاد خودداری کن.
* اگه داده ها خیلی زیادن، می‌تونی از تکنیک‌هایی مثل downsampling (نمایش زیرمجموعه‌ای از داده‌ها) استفاده کنی یا نمودارهای تعاملی (مثل Plotly) رو امتحان کنی.
* می‌تونی از اسنیپت‌های CSS هم برای استایل‌دهی بهتر تو وب استفاده کنی، اگه نمودارهاتو توی صفحات وب embed می‌کنی.

4. مشکلات عملکردی یا کندی

* **مشکل:** رسم نمودارهای بسیار بزرگ با میلیون‌ها نقطه داده ممکنه کند باشه.
* **راه‌حل:**
* از NumPy برای عملیات روی آرایه‌ها استفاده کن. Matplotlib با آرایه‌های NumPy بهینه کار می‌کنه.
* در صورت نیاز، داده‌هاتو قبل از رسم فیلتر یا خلاصه کن.
* برای نمودارهای تعاملی با حجم داده بالا، کتابخانه‌هایی مثل Plotly یا Bokeh رو بررسی کن که برای این منظور طراحی شدن و از WebGL استفاده می‌کنن.
* مراقب مصرف حافظه باش، به خصوص وقتی چندین شکل یا زیرنمودار رو همزمان باز نگه می‌داری.

حرف آخر و مسیر پیش رو

تبریک می‌گم! تا اینجا با Matplotlib و رسم انواع نمودارها با کدهای آماده کامل آشنا شدی و حتی راه حل مشکلات رایج رو هم یاد گرفتی. Matplotlib یه ابزار فوق‌العاده قویه که با تمرین و کنجکاوی می‌تونی ازش برای خلق بصری‌سازی‌های بی‌نظیر استفاده کنی. فراموش نکن که تمرین کلید کاره. این کدهای آماده رو بردار، دستکاریشون کن، داده‌های خودتو بهشون بده و ببین چطور می‌تونی اطلاعات رو به بهترین شکل ممکن به تصویر بکشی. اگه باز هم سوالی داشتی یا نیاز به راهنمایی بیشتر پیدا کردی، می‌تونی با ما تماس بگیری: 09202232789. ما همیشه برای کمک اینجا هستیم!

🚀 آماده‌ای پروژه‌هایت را متحول کنی؟

اگر به دنبال اسنیپت‌های آماده و کاربردی برای جاوا اسکریپت، HTML، CSS یا پایتون هستی، همین الان یه سری به بخش کدهای آماده و اسنیپت‌های ما بزن! ما کلی ابزار و کد برات جمع کردیم که ساعت‌ها وقتت رو صرفه‌جویی می‌کنه و بهت کمک می‌کنه سریع‌تر و با کیفیت بالاتر کد بزنی.

همین حالا به فروشگاه ابزارهای ما سر بزن!

Table of Contents

آخرین نوشته‌ها