تصویرسازی داده با استفاده از Matplotlib در پایتون
Matplotlib یک کتابخانه قدرتمند و پرکاربرد در پایتون برای ایجاد نمودارهای ایستا، متحرک و تعاملی است. در این مقاله، راهنمایی در مورد Matplotlib و نحوه استفاده از آن برای تصویرسازی دادهها با پیادهسازی عملی ارائه خواهیم کرد.
تصویرسازی داده با استفاده از Matplotlib
Matplotlib انواع مختلفی از نمودارها مانند نمودارهای خطی، ستونی، پراکندگی و هیستوگرام را ارائه میدهد که آن را برای انجام تحلیلهای مختلف دادهای بسیار کارآمد میکند. این کتابخانه بر اساس NumPy ساخته شده است که آن را برای پردازش مجموعه دادههای بزرگ بهینه میکند و انعطافپذیری زیادی در کدنویسی ارائه میدهد.
نصب Matplotlib برای تصویرسازی داده
میتوانیم این کتابخانه را با استفاده از دستور pip نصب کنیم. اگر pip را نصب نکردهاید، به مقاله دانلود و نصب نسخه آخر pip مراجعه کنید.
برای نصب Matplotlib، دستور زیر را در ترمینال اجرا کنید:
pip install matplotlib
اگر از Jupyter Notebook استفاده میکنید، میتوانید آن را در یک سلول از نوتبوک با استفاده از دستور زیر نصب کنید:
!pip install matplotlib
تصویرسازی داده با Pyplot در Matplotlib
Matplotlib ماژولی به نام pyplot
ارائه میدهد که یک رابط مشابه MATLAB برای ایجاد نمودارها و گرافها فراهم میکند. این ماژول فرآیند ایجاد انواع مختلفی از نمودارها را با ارائه مجموعهای از توابع که وظایف متداول رسم نمودار را انجام میدهند، سادهتر میکند.
Matplotlib از انواع مختلفی از نمودارها از جمله نمودارهای خطی، ستونی، هیستوگرام، پراکندگی و … پشتیبانی میکند. در ادامه، هر یک از این موارد را همراه با مثال بررسی میکنیم.
1. نمودار خطی (Line Chart)
نمودار خطی یکی از نمودارهای پایهای است که با استفاده از تابع plot()
ایجاد میشود. این نمودار رابطه بین دو مجموعه دادهی X و Y را نمایش میدهد.
مثال:
import matplotlib.pyplot as plt
x = [10, 20, 30, 40]
y = [20, 25, 35, 55]
plt.plot(x, y)
plt.title("نمودار خطی")
plt.ylabel('محور Y')
plt.xlabel('محور X')
plt.show()
خروجی:
📊 نمودار خطی در Matplotlib
2. نمودار ستونی (Bar Chart)
نمودار ستونی، دادههای دستهبندیشده را با استفاده از مستطیلهایی با ارتفاع یا طول متناسب با مقدار داده نمایش میدهد. نمودارهای ستونی میتوانند بهصورت افقی یا عمودی رسم شوند.
در مثال زیر از دیتاست tips
استفاده شده است که شامل اطلاعات مربوط به انعامهای پرداختشده در یک رستوران در اوایل دهه ۱۹۹۰ میباشد.
مثال:
import matplotlib.pyplot as plt
import pandas as pd
data = pd.read_csv('tips.csv')
x = data['day']
y = data['total_bill']
plt.bar(x, y)
plt.title("دادههای Tips")
plt.ylabel('مجموع صورتحساب')
plt.xlabel('روز')
plt.show()
خروجی:
📊 نمودار ستونی در Matplotlib
3. هیستوگرام (Histogram)
هیستوگرام برای نمایش دادهها بهصورت گروهبندیشده استفاده میشود. در این نوع نمودار، محور X نشاندهنده بازههای داده و محور Y نشاندهنده فرکانس داده در هر بازه است. تابع hist()
برای ایجاد هیستوگرام استفاده میشود.
مثال:
import matplotlib.pyplot as plt
import pandas as pd
data = pd.read_csv('tips.csv')
x = data['total_bill']
plt.hist(x)
plt.title("دادههای Tips")
plt.ylabel('تعداد')
plt.xlabel('مجموع صورتحساب')
plt.show()
خروجی:
📊 هیستوگرام در Matplotlib
4. نمودار پراکندگی (Scatter Plot)
نمودارهای پراکندگی برای بررسی روابط بین متغیرها استفاده میشوند. تابع scatter()
در کتابخانه Matplotlib برای رسم این نمودار به کار میرود.
مثال:
import matplotlib.pyplot as plt
import pandas as pd
data = pd.read_csv('tips.csv')
x = data['day']
y = data['total_bill']
plt.scatter(x, y)
plt.title("دادههای Tips")
plt.ylabel('مجموع صورتحساب')
plt.xlabel('روز')
plt.show()
خروجی:
📊 نمودار پراکندگی در Matplotlib
5. نمودار دایرهای (Pie Chart)
نمودار دایرهای یک نمودار دایرهایشکل است که فقط یک سری از دادهها را نمایش میدهد. هر بخش از دایره نشاندهنده درصدی از کل داده است. این نمودار با استفاده از تابع pie()
ایجاد میشود.
دستور کلی:
matplotlib.pyplot.pie(data, explode=None, labels=None, colors=None, autopct=None, shadow=False)
مثال:
import matplotlib.pyplot as plt
import pandas as pd
cars = ['AUDI', 'BMW', 'FORD', 'TESLA', 'JAGUAR']
data = [23, 10, 35, 15, 12]
plt.pie(data, labels=cars)
plt.title("دادههای خودروها")
plt.show()
خروجی:
📊 نمودار دایرهای در Matplotlib
این مقاله یک راهنمای کلی برای کار با Matplotlib بود. با استفاده از این ابزار، میتوانید تحلیل دادههای خود را به شیوهای بصریتر و کارآمدتر انجام دهید. 📈
۶. نمودار جعبهای (Box Plot)
نمودار جعبهای که با نام Whisker Plot نیز شناخته میشود، یک روش استاندارد برای نمایش توزیع دادهها بر اساس خلاصه پنجعددی است که شامل حداقل مقدار، چارک اول (Q1)، میانه (Q2)، چارک سوم (Q3) و حداکثر مقدار میشود. این نمودار همچنین میتواند نقاط پرت (Outliers) را نشان دهد.
مثال ایجاد نمودار جعبهای با Matplotlib در پایتون:
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(10)
data = [np.random.normal(0, std, 100) for std in range(1, 4)]
# ایجاد نمودار جعبهای
plt.boxplot(data, vert=True, patch_artist=True,
boxprops=dict(facecolor='skyblue'),
medianprops=dict(color='red'))
plt.xlabel('Data Set')
plt.ylabel('Values')
plt.title('Example of Box Plot')
plt.show()
توضیح کد:
plt.boxplot(data)
: نمودار جعبهای را ایجاد میکند.vert=True
: نمایش نمودار بهصورت عمودی.patch_artist=True
: رنگآمیزی جعبهها.boxprops
وmedianprops
: تنظیم رنگ و ظاهر جعبهها و خط میانه.
نکته:
- جعبه نشاندهنده دامنه بین چارکها (IQR) است.
- خط داخل جعبه میانه دادهها را نمایش میدهد.
- “خطهای سبیل” (Whiskers) تا حداقل و حداکثر مقادیر دادههایی که در فاصله 1.5 برابر IQR از چارک اول و سوم قرار دارند، کشیده میشوند.
- نقاط خارج از این محدوده به عنوان نقاط پرت نمایش داده میشوند.
۷. نقشه حرارتی (Heatmap)
نقشه حرارتی یک تکنیک تجسم داده است که دادهها را به شکل ماتریس نمایش میدهد و مقدار هر داده با رنگی خاص نشان داده میشود. این نمودار برای بررسی الگوها، همبستگیها و توزیعها بسیار مفید است.
مثال ایجاد نقشه حرارتی با Matplotlib در پایتون:
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(0)
data = np.random.rand(10, 10)
plt.imshow(data, cmap='viridis', interpolation='nearest')
plt.colorbar()
plt.xlabel('X-axis Label')
plt.ylabel('Y-axis Label')
plt.title('Example of Heatmap')
plt.show()
توضیح کد:
plt.imshow(data, cmap='viridis')
: نمایش دادهها به عنوان یک تصویر (Heatmap).interpolation='nearest'
: هر مقدار را به صورت یک بلوک رنگی بدون هموارسازی نمایش میدهد.plt.colorbar()
: نمایش نوار رنگی جهت تفسیر مقادیر.
نکته:
- رنگهای تیره مقادیر کمتر و رنگهای روشن مقادیر بیشتر را نشان میدهند.
- این نمودار در حوزههایی مانند تحلیل دادهها، بیوانفورماتیک و مالی کاربرد زیادی دارد.
سفارشیسازی و استایلدهی به نمودارها در Matplotlib
Matplotlib امکانات زیادی برای سفارشیسازی نمودارها ارائه میدهد، از جمله تغییر رنگها، اضافه کردن برچسبها، تغییر سبک خطوط و سایر ویژگیهای بصری.
۱. سفارشیسازی نمودار خطی (Line Chart)
ویژگیهای مهم برای تنظیم نمودار خطی:
color
: تغییر رنگ خطlinewidth
: تغییر ضخامت خطmarker
: تغییر سبک نقاط دادهmarkersize
: تغییر اندازه نشانگرهاlinestyle
: تغییر سبک خط
مثال:
import matplotlib.pyplot as plt
x = [10, 20, 30, 40]
y = [20, 25, 35, 55]
plt.plot(x, y, color='green', linewidth=3, marker='o',
markersize=15, linestyle='--')
plt.title("Line Chart")
plt.ylabel('Y-Axis')
plt.xlabel('X-Axis')
plt.show()
۲. سفارشیسازی نمودار میلهای (Bar Chart)
ویژگیهای مهم برای تنظیم نمودار میلهای:
color
: رنگ داخل میلههاedgecolor
: رنگ لبههای میلههاlinewidth
: ضخامت لبههاwidth
: عرض میلهها
مثال:
import matplotlib.pyplot as plt
import pandas as pd
data = pd.read_csv('tips.csv')
x = data['day']
y = data['total_bill']
plt.bar(x, y, color='green', edgecolor='blue', linewidth=2)
plt.title("Tips Dataset")
plt.ylabel('Total Bill')
plt.xlabel('Day')
plt.show()
۳. سفارشیسازی نمودار هیستوگرام (Histogram Plot)
ویژگیهای مهم برای تنظیم هیستوگرام:
bins
: تعداد بازههاcolor
: رنگ پرشدگیedgecolor
: رنگ لبههاlinestyle
: سبک لبههاalpha
: مقدار شفافیت (بین 0 و 1)
مثال:
import matplotlib.pyplot as plt
import pandas as pd
data = pd.read_csv('tips.csv')
x = data['total_bill']
plt.hist(x, bins=25, color='green', edgecolor='blue',
linestyle='--', alpha=0.5)
plt.title("Tips Dataset")
plt.ylabel('Frequency')
plt.xlabel('Total Bill')
plt.show()
۴. سفارشیسازی نمودار پراکندگی (Scatter Plot)
ویژگیهای مهم برای تنظیم نمودار پراکندگی:
s
: اندازه نشانگرهاc
: رنگ نشانگرهاmarker
: سبک نشانگرlinewidths
: ضخامت لبه نشانگرهاedgecolor
: رنگ لبه نشانگرهاalpha
: شفافیت (بین 0 و 1)
مثال:
import matplotlib.pyplot as plt
import pandas as pd
data = pd.read_csv('tips.csv')
x = data['day']
y = data['total_bill']
plt.scatter(x, y, c=data['size'], s=data['total_bill'],
marker='D', alpha=0.5)
plt.title("Tips Dataset")
plt.ylabel('Total Bill')
plt.xlabel('Day')
plt.show()
5. سفارشیسازی نمودار پای
نمودارهای پای ابزارهای عالی برای نمایش تناسبها و بخشهای یک کل هستند. برای مؤثرتر و جذابتر کردن نمودارهای پای خود، تکنیکهای سفارشیسازی زیر را در نظر بگیرید:
- explode: جابجایی بخشهای نمودار
- autopct: برچسب زدن بخشها با مقدار عددی آنها
- color: ویژگیای که برای دادن رنگ به بخشها استفاده میشود
- shadow: استفاده از سایه برای بخشها
مثال:
import matplotlib.pyplot as plt
import pandas as pd
data = pd.read_csv('tips.csv')
cars = ['AUDI', 'BMW', 'FORD', 'TESLA', 'JAGUAR']
data = [23, 13, 35, 15, 12]
explode = [0.1, 0.5, 0, 0, 0]
colors = ("orange", "cyan", "yellow", "grey", "green")
plt.pie(data, labels=cars, explode=explode, autopct='%1.2f%%',
colors=colors, shadow=True)
plt.show()
اجزای اصلی Matplotlib: Figures و Axes
قبل از ادامه به بررسی Matplotlib، اجازه دهید برخی از کلاسهای مهم که در ادامه آموزش استفاده خواهند شد را معرفی کنیم. این کلاسها عبارتند از:
1. کلاس Figure
کلاس Figure را به عنوان پنجره یا صفحه کلی در نظر بگیرید که همه چیز بر روی آن رسم میشود. این یک container سطح بالا است که شامل یک یا چند axes میباشد. یک figure میتواند با استفاده از متد figure()
ایجاد شود.
نحو:
class matplotlib.figure.Figure(figsize=None, dpi=None, facecolor=None, edgecolor=None, linewidth=0.0, frameon=None, subplotpars=None, tight_layout=None, constrained_layout=None)
مثال:
import matplotlib.pyplot as plt
from matplotlib.figure import Figure
x = [10, 20, 30, 40]
y = [20, 25, 35, 55]
# ایجاد یک figure جدید با عرض 7 اینچ و ارتفاع 5 اینچ
# با رنگ زمینه سبز، رنگ لبه قرمز و عرض خط لبه 7
fig = plt.figure(figsize=(7, 5), facecolor='g',
edgecolor='b', linewidth=7)
ax = fig.add_axes([1, 1, 1, 1])
ax.plot(x, y)
plt.title("Linear graph", fontsize=25, color="yellow")
plt.ylabel('Y-Axis')
plt.xlabel('X-Axis')
plt.ylim(0, 80)
plt.xticks(x, labels=["one", "two", "three", "four"])
plt.legend(["GFG"])
plt.show()
2. کلاس Axes
کلاس Axes، واحد پایهای و انعطافپذیر برای ایجاد نمودارهای فرعی است. یک figure ممکن است شامل چندین axes باشد، اما یک axes فقط میتواند در یک figure وجود داشته باشد. متد axes()
شیء axes را ایجاد میکند.
نحو:
axes([left, bottom, width, height])
برخی از متدهای مفید برای اضافه کردن عنوان، برچسبها و غیره عبارتند از:
ax.set_title()
برای اضافه کردن عنوانax.set_xlabel()
وax.set_ylabel()
برای اضافه کردن برچسبهای محورهاax.set_xlim()
وax.set_ylim()
برای تنظیم حدهای محورهاax.set_xticklabels()
وax.set_yticklabels()
برای تنظیم برچسبهای محورax.legend()
برای افزودن افسانه
مثال:
import matplotlib.pyplot as plt
from matplotlib.figure import Figure
x = [10, 20, 30, 40]
y = [20, 25, 35, 55]
fig = plt.figure(figsize=(5, 4))
ax = fig.add_axes([1, 1, 1, 1])
ax1 = ax.plot(x, y)
ax2 = ax.plot(y, x)
ax.set_title("Linear Graph")
ax.set_xlabel("X-Axis")
ax.set_ylabel("Y-Axis")
ax.legend(labels=('line 1', 'line 2'))
plt.show()
نمودارهای ترکیبی پیشرفته: تکنیکهایی برای نمایش نمودارهای فرعی
برای ایجاد چندین نمودار در یک figure، میتوانید از متدهای مختلفی استفاده کنید. در اینجا سه روش مختلف برای ایجاد چندین نمودار و subplot آورده شده است:
روش 1: استفاده از متد add_axes()
متد add_axes()
به شما این امکان را میدهد که به صورت دستی axes را به یک figure اضافه کنید. این متد چهار مقدار [چپ، پایین، عرض، ارتفاع] را برای تعیین موقعیت و اندازه axes میگیرد.
مثال:
import matplotlib.pyplot as plt
from matplotlib.figure import Figure
x = [10, 20, 30, 40]
y = [20, 25, 35, 55]
# ایجاد یک figure جدید با عرض 5 اینچ و ارتفاع 4 اینچ
fig = plt.figure(figsize=(5, 4))
ax1 = fig.add_axes([0.1, 0.1, 0.8, 0.8])
ax2 = fig.add_axes([1, 0.1, 0.8, 0.8])
ax1.plot(x, y)
ax2.plot(y, x)
plt.show()
روش 2: استفاده از متد subplot()
متد subplot()
یک plot را به موقعیت مشخصی در داخل شبکه تعریفشده figure اضافه میکند. این متد سه آرگومان میگیرد: تعداد ردیفها، ستونها و اندیس plot.
مثال:
import matplotlib.pyplot as plt
x = [10, 20, 30, 40]
y = [20, 25, 35, 55]
plt.figure()
plt.subplot(121)
plt.plot(x, y)
plt.subplot(122)
plt.plot(y, x)
plt.show()
روش 3: استفاده از متد subplot2grid()
متد subplot2grid()
به شما این امکان را میدهد که شیء axes را در یک مکان مشخص در داخل یک شبکه ایجاد کنید و همچنین میتواند axes را در چندین ردیف یا ستون گسترش دهد.
مثال:
import matplotlib.pyplot as plt
x = [10, 20, 30, 40]
y = [20, 25, 35, 55]
axes1 = plt.subplot2grid((7, 1), (0, 0), rowspan=2, colspan=1)
axes2 = plt.subplot2grid((7, 1), (2, 0), rowspan=2, colspan=1)
axes1.plot(x, y)
axes2.plot(y, x)
plt.show()
ذخیره نمودارهای Matplotlib با استفاده از savefig()
برای ذخیره یک نمودار در یک فایل در دیسک، از متد savefig()
استفاده میشود. یک فایل میتواند در فرمتهای مختلفی مانند .png، .jpg، .pdf و غیره ذخیره شود.
مثال:
import matplotlib.pyplot as plt
year = ['2010', '2002', '2004', '2006', '2008']
production = [25, 15, 35, 30, 10]
plt.bar(year, production)
plt.savefig("output.jpg")
plt.savefig("output1", facecolor='y', bbox_inches="tight",
pad_inches=0.3, transparent=True)
سوالات متداول – تجسم دادهها با Matplotlib در Python
- تفاوت بین pyplot و figure چیست؟
pyplot
یک ماژول در Matplotlib است که رابطی مشابه MATLAB برای ایجاد نمودارها فراهم میکند و فرآیند رسم را ساده میکند. از طرف دیگر، کلاسfigure
یک container برای تمام عناصر نمودار است و به عنوان بوم برای رسم نمودارها عمل میکند.
- آیا Matplotlib برای تجسمهای تعاملی نیز مناسب است؟
- بله، Matplotlib از تجسمهای تعاملی از طریق یکپارچگی با backendهای تعاملی و کتابخانههایی مانند Jupyter Notebook پشتیبانی میکند.
- چه گزینههای سفارشیسازی پیشرفتهای در Matplotlib موجود است؟
- Matplotlib گزینههای زیادی برای سفارشیسازی دارد، از جمله تغییر استایلها، رنگها و افزودن حاشیهنویسیها.
- چگونه میتوانم دادههای بزرگ را در Matplotlib مدیریت کنم؟
- هنگامی که با دادههای بزرگ سر و کار دارید، باید نمودارها را برای عملکرد بهینه کنید. Matplotlib بهطور مؤثر میتواند دادههای بزرگ را با استفاده از آرایههای NumPy مدیریت کند.
- آیا میتوانم نمودارهای تعاملی با Matplotlib ایجاد کنم؟
- در حالی که Matplotlib عمدتاً برای نمودارهای ایستا استفاده میشود، از ویژگیهای تعاملی محدود مانند زوم و پنینگ از طریق Jupyter Notebook پشتیبانی میکند.
2 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
با اینکه یه بار بیشتر استفاده نکردم ولی تجربه خوبی بود.
دم شما گرم