🐍 کتابخانه مرجع پایتون

📈 مبانی Matplotlib

Matplotlib یکی از محبوب‌ترین کتابخانه‌های پایتون برای مصورسازی داده است. این کتابخانه امکانات گسترده‌ای برای رسم انواع نمودارها مانند خطی، میله‌ای، پراکندگی، هیستوگرام و ... فراهم می‌کند. Matplotlib پایه و اساس بسیاری از کتابخانه‌های مصورسازی دیگر مانند Seaborn و Plotly است.

🔹 نصب و import

# نصب (در محیط واقعی)
# pip install matplotlib

# import کردن
import matplotlib.pyplot as plt
import numpy as np

# بررسی نسخه
print(plt.matplotlib.__version__)

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

import matplotlib.pyplot as plt
import numpy as np

# داده‌ها
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 4, 6, 8, 10])

# ایجاد نمودار
plt.plot(x, y)
plt.title("Simple Line Plot")
plt.xlabel("X-axis")
plt.ylabel("Y-axis")
plt.grid(True)
plt.show()

🔹 سفارشی‌سازی نمودار خطی

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

# ایجاد نمودار با تنظیمات
plt.plot(x, y1, label="sin(x)", color="blue", linestyle="-", linewidth=2)
plt.plot(x, y2, label="cos(x)", color="red", linestyle="--", linewidth=2)

plt.title("Sine and Cosine Functions")
plt.xlabel("x")
plt.ylabel("y")
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()

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

import matplotlib.pyplot as plt
import numpy as np

# داده‌ها
categories = ["A", "B", "C", "D", "E"]
values = [15, 30, 45, 20, 35]

# ایجاد نمودار میله‌ای
plt.bar(categories, values, color="skyblue", edgecolor="black")
plt.title("Bar Chart Example")
plt.xlabel("Categories")
plt.ylabel("Values")
plt.show()

# نمودار میله‌ای افقی
plt.barh(categories, values, color="lightgreen", edgecolor="black")
plt.title("Horizontal Bar Chart")
plt.xlabel("Values")
plt.ylabel("Categories")
plt.show()

🔹 نمودار پراکندگی (Scatter Plot)

import matplotlib.pyplot as plt
import numpy as np

# داده‌های تصادفی
np.random.seed(42)
x = np.random.randn(100)
y = 2 * x + 1 + np.random.randn(100) * 0.5

# ایجاد نمودار پراکندگی
plt.scatter(x, y, color="purple", alpha=0.6, s=50)
plt.title("Scatter Plot")
plt.xlabel("X")
plt.ylabel("Y")
plt.grid(True, alpha=0.3)
plt.show()

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

import matplotlib.pyplot as plt
import numpy as np

# داده‌های تصادفی با توزیع نرمال
data = np.random.randn(1000)

# ایجاد هیستوگرام
plt.hist(data, bins=30, color="orange", edgecolor="black", alpha=0.7)
plt.title("Histogram")
plt.xlabel("Value")
plt.ylabel("Frequency")
plt.grid(True, alpha=0.3)
plt.show()

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

import matplotlib.pyplot as plt

# داده‌ها
labels = ["Python", "JavaScript", "Java", "C++", "Other"]
sizes = [40, 25, 20, 10, 5]
colors = ["#ff9999", "#66b3ff", "#99ff99", "#ffcc99", "#c2c2f0"]

# ایجاد نمودار دایره‌ای
plt.pie(sizes, labels=labels, colors=colors, autopct="%1.1f%%", startangle=90)
plt.title("Programming Languages Usage")
plt.axis("equal")  # دایره کامل
plt.show()

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

import matplotlib.pyplot as plt
import numpy as np

# داده‌های تصادفی
np.random.seed(42)
data1 = np.random.normal(0, 1, 100)
data2 = np.random.normal(2, 1.5, 100)
data3 = np.random.normal(-1, 2, 100)

# ایجاد نمودار جعبه‌ای
plt.boxplot([data1, data2, data3], labels=["Group 1", "Group 2", "Group 3"])
plt.title("Box Plot")
plt.ylabel("Values")
plt.grid(True, alpha=0.3)
plt.show()

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

import matplotlib.pyplot as plt
import numpy as np

# ایجاد شکل و زیرنمودارها
fig, axes = plt.subplots(2, 2, figsize=(10, 8))

# داده‌ها
x = np.linspace(0, 10, 100)

# نمودار اول: خطی
axes[0, 0].plot(x, np.sin(x), color="blue")
axes[0, 0].set_title("Sine")
axes[0, 0].grid(True)

# نمودار دوم: میله‌ای
categories = ["A", "B", "C", "D"]
values = [10, 20, 15, 25]
axes[0, 1].bar(categories, values, color="green")
axes[0, 1].set_title("Bar Chart")

# نمودار سوم: پراکندگی
x_scatter = np.random.randn(50)
y_scatter = np.random.randn(50)
axes[1, 0].scatter(x_scatter, y_scatter, color="red", alpha=0.6)
axes[1, 0].set_title("Scatter Plot")
axes[1, 0].grid(True)

# نمودار چهارم: هیستوگرام
data_hist = np.random.randn(500)
axes[1, 1].hist(data_hist, bins=20, color="orange", edgecolor="black")
axes[1, 1].set_title("Histogram")

plt.tight_layout()
plt.show()

🔹 ذخیره نمودار در فایل

import matplotlib.pyplot as plt
import numpy as np

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

plt.plot(x, y, label="sin(x)")
plt.title("Sine Function")
plt.xlabel("x")
plt.ylabel("y")
plt.legend()
plt.grid(True)

# ذخیره در فایل
plt.savefig("sine_plot.png", dpi=300, bbox_inches="tight")
plt.savefig("sine_plot.pdf")  # همچنین PDF
print("Plot saved as sine_plot.png and sine_plot.pdf")

# نمایش
plt.show()

🔹 تنظیمات پیشرفته

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

# تنظیمات پیشرفته
plt.figure(figsize=(12, 6))
plt.plot(x, y1, label="sin(x)", color="blue", linestyle="-", linewidth=2, marker="o", markersize=4)
plt.plot(x, y2, label="cos(x)", color="red", linestyle="--", linewidth=2)

plt.title("Advanced Plot", fontsize=16, fontweight="bold")
plt.xlabel("X-axis", fontsize=12)
plt.ylabel("Y-axis", fontsize=12)
plt.legend(fontsize=12, loc="upper right")
plt.grid(True, alpha=0.3, linestyle=":")
plt.xticks(np.arange(0, 11, 2))
plt.yticks(np.arange(-1.5, 1.6, 0.5))
plt.xlim(0, 10)
plt.ylim(-1.5, 1.5)
plt.show()

🔹 استایل‌های مختلف

import matplotlib.pyplot as plt
import numpy as np

# لیست استایل‌های موجود
print("Available styles:", plt.style.available[:10])

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

# استفاده از استایل
plt.style.use("ggplot")
plt.plot(x, y, label="sin(x)")
plt.title("ggplot Style")
plt.xlabel("x")
plt.ylabel("y")
plt.legend()
plt.grid(True)
plt.show()

# بازگشت به استایل پیش‌فرض
plt.style.use("default")

🔹 نمودارهای سه‌بعدی (3D)

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

# ایجاد داده
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection="3d")

x = np.linspace(-5, 5, 50)
y = np.linspace(-5, 5, 50)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))

# رسم سطح سه‌بعدی
surf = ax.plot_surface(X, Y, Z, cmap="viridis", edgecolor="none")
ax.set_title("3D Surface Plot")
ax.set_xlabel("X")
ax.set_ylabel("Y")
ax.set_zlabel("Z")
fig.colorbar(surf)
plt.show()

🔹 مثال جامع: تحلیل داده فروش

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

# ایجاد داده فروش
np.random.seed(42)
dates = pd.date_range("2024-01-01", periods=30)
products = ["Product A", "Product B", "Product C", "Product D"]

data = {
    "Date": np.random.choice(dates, 200),
    "Product": np.random.choice(products, 200),
    "Sales": np.random.randint(50, 200, 200)
}

df = pd.DataFrame(data)

# ۱. مجموع فروش هر محصول
product_sales = df.groupby("Product")["Sales"].sum()
print("Total sales per product:")
print(product_sales)

# ۲. نمودار میله‌ای فروش محصولات
plt.figure(figsize=(10, 6))
plt.bar(product_sales.index, product_sales.values, color=["blue", "green", "orange", "red"])
plt.title("Total Sales by Product")
plt.xlabel("Product")
plt.ylabel("Total Sales")
plt.grid(True, alpha=0.3)
plt.show()

# ۳. فروش روزانه
daily_sales = df.groupby("Date")["Sales"].sum()

plt.figure(figsize=(12, 6))
plt.plot(daily_sales.index, daily_sales.values, marker="o", linestyle="-", linewidth=2, markersize=4)
plt.title("Daily Sales")
plt.xlabel("Date")
plt.ylabel("Sales")
plt.grid(True, alpha=0.3)
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

# ۴. توزیع فروش با هیستوگرام
plt.figure(figsize=(10, 6))
plt.hist(df["Sales"], bins=15, color="green", edgecolor="black", alpha=0.7)
plt.title("Distribution of Sales")
plt.xlabel("Sales")
plt.ylabel("Frequency")
plt.grid(True, alpha=0.3)
plt.show()

# ۵. نمودار جعبه‌ای فروش بر اساس محصول
plt.figure(figsize=(10, 6))
product_groups = [df[df["Product"] == p]["Sales"] for p in products]
plt.boxplot(product_groups, labels=products)
plt.title("Sales Distribution by Product")
plt.ylabel("Sales")
plt.grid(True, alpha=0.3)
plt.show()

📌 نکات کلیدی

← قبلی: مبانی Pandas → بعدی: API با requests ↑ بازگشت به فهرست متوسط