📈 مبانی 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()
📌 نکات کلیدی
- ✅ Matplotlib برای مصورسازی داده در پایتون استفاده میشود.
- ✅ با
plt.plot()نمودارهای خطی رسم میشوند. - ✅
plt.bar()وplt.barh()برای نمودارهای میلهای. - ✅
plt.scatter()برای نمودارهای پراکندگی. - ✅
plt.hist()برای رسم هیستوگرام. - ✅
plt.pie()برای نمودارهای دایرهای. - ✅
plt.boxplot()برای نمودارهای جعبهای. - ✅ با
plt.subplots()میتوانید چندین نمودار را در یک شکل رسم کنید. - ✅
plt.savefig()برای ذخیره نمودار در فایل. - ✅ Matplotlib با Pandas و NumPy به خوبی کار میکند.