آموزش matplotlib در پایتون
در این پست میخواهیم در سریعترین و بهترین حالت ممکن، به شما رسم نمودار در پایتون را آموزش دهیم. در انتهای این آموزش شما خواهید توانست تقریبا هر نموداری را در پایتون رسم کنید. خب ادعا بس است برویم سراغ آموزش! برای رسم نمودار، شما به کتابخانه matplotlib در پایتون نیاز دارید. matplotlib چیست ؟ این کتابخانه آنقدر نمودارهای متنوع دارد که به راحتی با دستورات آماده آن خواهید توانست نمودارهای دلخواه خودتان را در پایتون رسم کنید. پس اگر دنبال آموزش matplotlib در پایتون هستید، حتما این پست را تا آخر بخوانید.
رسم نمودار در پایتون
یکی از راههای رسم نمودار در پایتون ، استفاده از کتابخانه matplotlib در پایتون است. کتابخانههای دیگری نیز برای رسم نمودار در پایتون وجود دارند، اما matplotlib پیشکسوت همه آنها است. با استفاده از matplotlib شما میتوانید انواع نمودارها را رسم کنید. نمودارهای دوبعدی، سه بعدی، نمودار میله ای، نمودار هیستوگرام، scatter plot و … . در ادامه خواهیم گفت matplotlib چیست و چگونه میتوان با کمک این کتابخانه رسم نمودار در پایتون را انجام داد.
پیشنیاز این آموزش، آموزش پایتون و نامپای است! خوشبختانه ما در هوسم، برای هردو آموزش داریم. اگر بر پایتون و نامپای مسلط نیستید، حتما به این آموزشها نگاهی بیندازید:
آموزش پایتون هوسم آموزش نامپای هوسم
matplotlib چیست
کتابخانه matplotlib، یک کتابخانه شناخته شده و پراستفاده برای رسم نمودار در پایتون است. شاید با بررسی تاریخ، بهتر متوجه شویم که کتابخانه matplotlib چیست. در گذشته اکثر مهندسان از نرمافزار متلب برای انجام کارهای تحقیقاتی استفاده میکردند. این نرمافزار بسیار بسیار قدرتمند و حرفهای طراحی شده بود و تقریبا تمامی نیازهای یک محقق را پوشش میداد. شاید هیچ محققی حتی نمیتوانست زندگی خود را بدون متلب تصور کند!
اما پایتون توانست متلب را شکست دهد و در دل محققان امروزی جا باز کند. اگرچه متلب یک نرمافزار همه چیز تمام است اما امروزه میبینیم که خیلی از محققان پایتون را ترجیح میدهند (چرا؟ دلیلش رو برامون کامنت کن). اما در ساختن کتابخانههای مهندسی پایتون، الگوی اول و آخر همان متلب است.
یکی از ویژگیهای نرمافزار متلب، دستورهایی بود که برای مصورسازی دادهها استفاده میشد. استفاده از این دستورها بسیار بسیار ساده بود و یک محقق تقریبا هر نموداری را میتوانست با متلب بکشد. اما با مهاجرت به پایتون چنین امکاناتی وجود نداشت و محققان این خلا را احساس میکردند (البته کتابخانههایی وجود داشتند ولی مثل متلب قدرتمند نبودند). این خلا باعث شد که یکی از همین محققان به نام جان هانتر (John Hunter) کتابخانه matplotlib را خلق کند.
خلق کتابخانه matplotlib
آقای هانتر در حال کار روی دادههای EEG بود که مجبور شد به پایتون مهاجرت کند. بعد از این مهاجرت او برای رسم نمودارهایش در پایتون به مشکل خورد و نتوانست پکیجی پیدا کند که نیازهایش را برطرف سازد. به همین دلیل آستینهایش را بالا زد و شروع کرد به نوشتن کتابخانهای که نیازهایش را برطرف کند! هدف او این بود که قابلیتهای متلب در رسم نمودار را به کتابخانه پایتونیاش منتقل کند. او موفق شد در سال 2003 اولین نسخه از کتابخانه matplotlib را منتشر کند.
نصب و فراخوانی کتابخانه matplotlib در پایتون
برای نصب کتابخانه matplotlib در پایتون کافی است پنجره cmd را باز کرده و کد زیر را در آن بنویسید:
pip install matplotlib
بعد از نصب کتابخانه matplotlib در پایتون، حالا باید آن را فراخوانی کنید. برای فراخوانی کتابخانه matplotlib، پایتون را باز کرده و کد زیر را وارد کنید:
import matplotlib as mpl
اما ما فقط به یک ماژول مهم از این کتابخانه بنام pyplot نیاز داریم. برای فراخوانی ماژول pyplot بنویسید:
import matplotlib.pyplot as plt
حالا که موفق به نصب کتابخانه matplotlib در پایتون شدید، بیایید بخش هیجان انگیز رسم نمودار در پایتون و matplotlib را شروع کنیم…
رسم نمودار دوبعدی با دستور plot در پایتون
برای رسم نمودار دوبعدی در پایتون از دستور plot میتوان استفاده کرد. فرض کنید از شما خواسته شده که نمودار سینوس را در بازه 0 تا 2π رسم کنید. اول از همه طبیعتا باید متغیرهایی برای محور x و y تعریف کنید. به این شکل میتوانید بنویسید:
import numpy as np x = np.linspace(0, 2*np.pi, 100) y = np.sin(x)
چه کار کردیم؟ اول از همه نامپای و pyplot را فراخوانی کردیم. بعد با استفاده از linspace یک متغیر x تعریف کردیم که 100 عدد بین 0 تا 2π دارد. یک متغیر y تعریف کردیم که مقدار سینوس را برای 100 نقطه x محاسبه میکند.
حالا نوبت رسم نمودار است. نصب کتابخانه matplotlib را در بخشهای قبلی انجام دادیم. ابتدا این کتابخانه را فراخوانی کنید. حالا برای رسم نمودار دو بعدی در کتابخانه matplotlib کافی است از دستور plot در ماژول pyplot استفاده کنید. متلبکارها با دستور plot آشنایی کامل دارند. دستور و اتفاقا ورودیها هم شبیه هم هستند! این دستور ابتدا مقادیر محور x، سپس مقادیر محور y را میگیرد. البته این دستور ورودیهای دیگری هم دارد که بعدا در موردشان صحبت میکنیم. برای رسم نمودار سینوس در بازه 0 تا 2π کافی است بنویسید:
import matplotlib.pyplot as plt plt.plot(x, y)
نتیجه اجرای این کد به شکل زیر است:
نمایش نمودار با دستور plt.show
در بخش قبلی از « آموزش matplotlib در پایتون »، گفتیم که یک نمودار در پایتون چطور رسم میشود. در ide-هایی مثل ژوپیتر نوشتن کد بالا کفایت میکند. اما در ide-هایی مثل پایچارم اینگونه نیست. یعنی با نوشتن کد بالا، به نمودار شکل 1 نخواهید رسید. در ide-هایی مثل پایچارم باید یک کد دیگر هم بنویسید تا نمودار نمایش داده شود:
plt.show()
همین خط کد باعث میشود نمودار شما نمایش داده شود. پس اگر از پایچارم و … استفاده میکنید، این خط را به آخر کدتان اضافه کنید.
رسم نمودار دادههای ذخیره شده در آرایه و لیست
با استفاده از دستور plot، هر نمودار دوبعدی دیگری را میتوان به همین صورت رسم کرد. x و y میتوانند لیست یا آرایهای از اعداد باشند. مثلا:
x = np.array([1, 2, 3, 4, 5, 6]) y = np.array([2, 3.3, 2, 2.5, 4.5, 3.8]) plt.plot(x, y)
نتیجه اجرای کد بالا به شکل زیر است:
اگر ورودی x را وارد نکنید و فقط یک ورودی به plot بدهید چه اتفاقی خواهد افتاد؟ خطا؟ نه. به صورت اتوماتیک به هر نقطه از y، یک مقدار x تخصیص داده میشود. مقادیر هم از 0 شروع میشوند. برای مثال قبل اگر فقط y را به plot بدهید چه اتفاقی خواهد افتاد؟
plt.plot(y)
مشاهده میکنید که شکل نمودار تغییری نکرده است، فقط مقادیر محور x از صفر شروع شدهاند. پس اگر مقدار x برابر با [0,1, 2, 3 … ] بود، شما میتوانید آن را در plt.plot وارد نکنید! این تمام کاری است که برای رسم یک نمودار ساده باید انجام دهید. اما تنظیمات دیگری وجود دارد که ظاهر این نمودار را تغییر میدهد. در بخشهای بعدی از آموزش matplotlib در پایتون ، با این تنظیمات آشنا خواهید شد.
تغییر رنگ نمودار در پایتون
در نگاه اول شاید از رنگ نمودار خوشمان نیاید و بخواهیم رنگش را تغییر دهیم. دستور plot، ورودیهای دیگری میگیرد که این کار را برایتان انجام خواهد داد. برای تغییر رنگ نمودار کافی است نام رنگ را به عنوان ورودی سوم وارد کنید. مثلا اگر میخواهید رنگ نمودار را سبز کنید، کافی است بنویسید:
plt.plot(x, y, color='green')
یا بنویسید:
plt.plot(x, y, 'green')
نتیجه اجرای هردو کد بالا نموداری به شکل زیر است:
مشاهده میکنید رنگ نمودار به سبز تغییر یافته است. نام رنگ را به شکل مخفف هم میتوان وارد کرد:
plt.plot(x, y, 'g')
در این حالت هم خروجی همان نمودار بالا است و تغییری نمیکند. از کجا بدانیم که چه رنگهای دیگری وجود دارد؟ ساده! لینک زیر را باز کنید و ببینید:
در بخش بعدی از آموزش matplotlib در پایتون ، میخواهیم نحوه تغییر استایل خط را آموزش دهیم.
تغییر خط نمودار در پایتون
در نمودارهایی که تاکنون رسم شدند، نمودار با یک خط پیوسته رسم شده است. اما بدانید و آگاه باشید که استایلهای مختلفی برای این خط وجود دارد. مثلا شما میتوانید نمودار را با خط تیره رسم کنید. برای این کار یک آرگومان در plot به نام linstyle وجود دارد که شما باید نام استایل خط را به آن بدهید. مثلا برای کشیدن نمودار به صورت خط تیره کافی است بنویسید:
plt.plot(x, y, linestyle='dashed')
نتیجه اجرای کد بالا به شکل زیر است:
استایلهای دیگری نیز برای خط وجود دارد. مثلا دستور زیر نمودار را به صورت دش-دات رسم میکند:
plt.plot(x, y, linestyle='dashdot')
این استایلها یک حالت خلاصه هم دارند. مثلا برای رسم نمودار با خط تیره کافی است بنویسید:
plt.plot(x, y, linestyle='--')
برای رسم نمودار به صورت دش-دات هم کافی است بنویسید:
plt.plot(x, y, linestyle='-.')
تمامی استایلهای خط در matplotlib را در جدول زیر آوردیم:
description | linestyle |
‘-‘ or ‘solid’ | solid line |
‘–‘ or ‘dashed’ | dashed line |
‘-.’ or ‘dashdot’ | dash-dotted line |
‘:’ or ‘dotted’ | dotted line |
در بخش بعدی از پست آموزش matplotlib در پایتون ، نحوه تغییر رنگ و استایل با هم را بررسی خواهیم کرد.
تغییر خط و رنگ نمودار به صورت همزمان در پایتون
در بخشهای قبلی دیدیم که برای شکل و رنگ، دو آرگومان ورودی مجزا وجود دارد. پس اگر میخواهید هر دو را تغییر دهید، کافی است برای هر دو آرگومان پارامتری در نظر بگیرید. اما میتوان دقیقا مشابه با متلب، استایل خط و رنگ آن را به صورت همزمان عوض کرد. برای این کار از فرم کوتاه شده رنگ و استایل استفاده کرده و چسبیده به هم و به صورت رشته به دستور plot بدهید. مثلا برای رسم نمودار با خطچین و رنگ قرمز، کافی است بنویسید:
plt.plot(x, y, 'r--')
حرف r، مخفف رنگ قرمز (red) و علامت – مربوط به استایل خطچین است. دقت کنید که ترکیب رنگ و استایل فقط با مخفف رنگ و علامت استایل امکانپذیر است و مثلا نمیتوان نوشت plt.plot(x, y, ‘red—’).
دقت کنید که میتوانید از پارامترهای linestyle و color برای تغییر رنگ و استایل استفاده کنید. مثلا برای داشتن نموداری شبیه به شکل 7، کافی است بنویسید:
plt.plot(x, y, color='red', linestyle='--')
نتیجه این کد هم شکل 7 است! روش قبل راحتتر بود، نه؟
محدود کردن محورها [ آموزش matplotlib در پایتون ]
به صورت پیشفرض در کتابخانه matplotlib، محورها به شکل مناسبی نمایش داده میشوند. معمولا حدود محورها کمی بیشتر از حدود نمودار هستند که ظاهر خوشایندی هم دارد. اما اگر به هر دلیلی خواستید حدود محورها را کمتر یا بیشتر کنید، میتوانید از دستورهای xlim و ylim استفاده کنید.
plt.plot(x,y) plt.xlim(-1, 11) plt.ylim(-1.5, 1.5);
با اجرای کد بالا خواهید داشت:
شما حتی میتوانید با دستورهای معرفی شده، محورها را به صورت عکس حالت معمول نمایش دهید! برای این کار کافی است مقادیر را برعکس بنویسید، یعنی:
plt.plot(x, y) plt.xlim(10, 0) plt.ylim(1.2, -1.2)
مشاهده میکنید بازه محور x، از 10 تا صفر و محور y، از 1- تا 1 است!
با استفاده از دستور axis میتوانید حدود محور x و y را به صورت یکجا و در یک خط تعیین کنید:
plt.plot(x,y) plt.axis([-1, 11, -1.5, 1.5])
رسم چند نمودار در یک پنجره
در متلب برای اینکه چند نمودار در یک پنجره رسم شوند، باید از دستور hold on استفاده شود. اما در پایتون اینگونه نیست و برای رسم چند نمودار در یک پنجره کافی است آنها را پشت سر هم بنویسید. مثلا برای رسم نمودار سینوس و کسینوس در یک پنجره کافی است بنویسید:
plt.plot(x, np.sin(x)) plt.plot(x, np.cos(x))
مشاهده میکنید که دو نمودار در یک پنجره رسم شدهاند. هر نمودار جدیدی که رسم شود، رنگ متمایزی نسبت به نمودارهای قبلی خواهد داشت. این تغییر رنگ به صورت اتوماتیک انجام میشود، مگر اینکه خودتان به صورت دستی رنگ نمودار را تغییر دهید. به همین ترتیب میتوانید هر چند نمودار که دلتان بخواهد را در یک پنجره رسم کنید.
رسم نمودار با خط و مارکر
در این بخش از آموزش matplotlib میخواهیم رسم نمودار با خط و مارکر را آموزش دهیم. در بخشهای قبلی توانستید نمودار مربوط به مجموعهای از نقاط را رسم کنید. دستور plot این نقاط را با یک خط به هم وصل میکرد و نمایش میداد. اما شاید بخواهید این نقاط را هم روی نمودار ببینید. این کار با استفاده از مارکرها امکانپذیر است.
یک راه برای اضافه کردن مارکرها این است که نام خلاصه مارکرها را به همراه خط وارد کنید. مثلا حرف o، نماد مارکر دایرهای است. برای رسم مارکرها برای نمودار سینوس کافی است بنویسید:
x = np.linspace(0, 2*np.pi, 30) y = np.sin(x) plt.plot(x, y, '-o')
مشاهده میکنید که نقاط (x,y) به صورت منفصل روی نمودار ظاهر شدهاند. یک راه دیگر برای رسم نمودار به شکل بالا این است که نوع مارکر را به صورت marker=’o’ است:
plt.plot(x, y, marker='o')
نتیجه اجرای این دستور دقیقا شکل 12 است. امااا، مارکرهای دیگری هم وجود دارند. مثلا مارکر بعلاوه که با علامت جمع (+) مشخص میشود:
plt.plot(x, y, marker='+')
مارکرهای دیگری هم وجود دارند که تعدادی از آنها را در جدول زیر آوردهایم:
مارکر | علامت |
دایره | “o” |
ستاره | “*” |
علامت جمع | “+” |
مربع | “s” |
مثلث | “^” |
پنجضلعی | “p” |
برای دیدن لیست کامل مارکرها روی لینک زیر کلیک کنید:
لیست کامل مارکرها در matplotlib
اضافه کردن عنوان به نمودار در matplotlib
تا اینجای پست « آموزش matplotlib در پایتون »، توانستید یک نمودار را با رنگها و خطهای متنوع در matplotlib رسم کنید. نگاهی به این نمودارها بیندازید. این نمودارها اگرچه کامل به نظر میرسند، اما یک چیزهایی کم دارند. در این بخش و بخشهای بعدی تعدادی از این کمبودها را رفع خواهیم کرد.
یکی از کمبودهایی که در این نمودارها وجود دارد، عنوان است. برای اضافه کردن عنوان به یک نمودار در پایتون ابتدا باید آن را رسم کنید. سپس با استفاده از دستور plt.title، یک عنوان برای نمودار خود انتخاب کنید.
plt.plot(x, y) plt.title(‘A Sine Curve’)
نتیجه اجرای این کد به شکل زیر است:
مشاهده میکنید که یک عنوان به نمودار اضافه شده است. به همین ترتیب میتوانید هر عنوان دلخواه دیگری برای نمودارهایتان در نظر بگیرید. در بخش بعدی میخواهیم یک برچسب برای هر محور بگذاریم…
اضافه کردن برچسب به هر محور در matplotlib
علاوه بر عنوان، شما میتوانید یک برچسب برای هر محور نیز در نظر بگیرید. مثلا در شکل 11، محور افقی مقدار x را نشان میدهد و محور عمودی مقادیر y را نشان میدهد. اگر بخواهید همین x و y کنار هر محور نوشته شود کافی است از xlabel و ylabel استفاده کنید. با استفاده از xlabel و ylabel شما میتوانید به ترتیب برچسب محور افقی و عمودی را تعیین کنید:
plt.plot(x, y) plt.xlabel('x') plt.ylabel('y')
مشاهده میکنید که برچسبهایی که میخواستید روی محورها اضافه شدهاند.
اضافه کردن legend به نمودار در matplotlib
legend در واقع همان راهنمای نمودارها است. اگر در یک پنجره چندین نمودار با رنگهای متفاوت داشته باشیم، آنگاه تشخیص اینکه کدام رنگ مربوط به کدام نمودار است بسیار سخت خواهد بود. از این رو به چنین نمودارهایی legend یا راهنما اضافه میکنند. این راهنما معمولا یک مستطیل کوچک در یک گوشه از پنجره است که هویت هر نمودار را نشان میدهد. برای اضافه کردن legend به نمودار در matplotlib کافی است از دستور plt.legend استفاده کنید:
plt.plot(x, np.sin(x)) plt.plot(x, np.cos(x)) plt.legend(['sin(x)', 'cos(x)'])
عناوین هر نمودار را به صورت رشته در یک لیست قرار داده و به دستور legend بدهید. دقت کنید که عنوان هر نمودار را به ترتیبِ رسم آن نمودار وارد کنید. یعنی اگر اول نمودار کسینوس و بعد نمودار سینوس را رسم کرده باشید، باید دستور را به شکل plt.legend([‘cos(x)’, ‘sin(x)’]) بنویسید. نتیجه اجرای کد بالا به شکل زیر است:
مشاهده میکنید که باکس راهنما در سمت چپ و پایین پنجره ظاهر شده است! با یک نگاه به باکس راهنما متوجه خواهید شد که نمودار آبی رنگ مربوط به سینوس و نمودار نارنجی رنگ مربوط به کسینوس است. در بخش بعدی از آموزش matplotlib در پایتون ، نحوه رسم نمودار پراکندگی در پایتون را خواهید آموخت.
رسم نمودار پراکندگی (scatter) [ آموزش matplotlib در پایتون ]
یکی از نمودارهای رایج در پایتون، نمودار پراکندگی یا همان scatter plot است. نمودار پراکندگی یعنی اینکه نقاط به صورت مجزا رسم شوند. دقیقا برخلاف نمودارهایی که تاکنون رسم کردیم که در آنها نقاط با یک خط به هم متصل میشوند. برای رسم نمودار پراکندگی دو راه وجود دارد. یکی استفاده از plt.plot و دیگری دستور plt.scatter. این دو روش را یکی یکی بررسی خواهیم کرد.
رسم نمودار پراکندگی با استفاده از plot
برای رسم نمودار پراکندگی به کمک plot، کافی است که از مارکرها کمک بگیرید. مارکرهای متنوعی هم برای این دستور وجود دارد. مثلا مارکر دایرهای بسیار رایج است. برای رسم نمودار پراکندگی با مارکر دایرهای کافی است حرف o را به صورت رشته به دستور plot بدهید. در کد زیر ابتدا به صورت تصادفی دو بردار تعریف شده و سپس این متغیرها رسم شده است:
x = np.random.randint(0, 10, 20) y = np.random.randint(0, 10, 20) plt.plot(x, y, 'o')
اگر شکلی که خودتان رسم کردید با شکل 15 یکی نیست اصلا مهم نیست چون دادهها به صورت تصادفی تولید شدهاند. همانطور که در بخشهای قبلی هم گفتیم، مارکرهای متنوعی در matplotlib وجود دارد. مثلا نمودار بالا با مارکر ستارهای به این صورت است:
x = np.random.randint(0, 10, 20) y = np.random.randint(0, 10, 20) plt.plot(x, y, '*')
رسم نمودار پراکندگی با استفاده از scatter
روش دوم رسم نمودار پراکندگی، استفاده از دستور plt.scatter است. برای رسم نمودار پراکندگی کافی است بنویسید:
x = np.random.randint(0, 10, 20) y = np.random.randint(0, 10, 20) plt.scatter(x, y)
برای تغییر مارکر باید یک ورودی دیگر به دستور scatter بدهید. مارکرها همان مارکرهای plot هستند و تفاوتی ندارند. مثلا برای رسم نمودار پراکندگی به صورت مثلثی کافی است بنویسید:
x = np.random.randint(0, 10, 20) y = np.random.randint(0, 10, 20) plt.scatter(x, y, marker='^')
مشاهده کردید که نوع مارکر به عنوان ورودی سوم و به صورت marker=’^’ به دستور scatter داده شده و در نتیجه نمودار پراکندگی با مارکرهای مثلثی رسم شده است. به همین ترتیب میتوانید هر مارکی که بخواهید انتخاب کنید.
تفاوت رسم نمودار پراکندگی با دستور plot و scatter
در دو بخش قبلی نمودار پراکندگی را هم با دستور plot و هم با دستور scatter رسم کردیم. نتیجه رسم نمودار پراکندگی با این دو دستور ظاهرا یکسان است. پس دیگر وجود scatter چه فایدهای داشت؟ از همان plot استفاده میکردیم دیگر چه نیازی به دستور scatter بود؟
تا الان ما تمام امکانات scatter را رو نکردیم! این دستور ویژگیهای دیگری هم دارد که در بخشهای بعدی به تعدادی از آنها خواهیم پرداخت. مثلا با دستور scatter میتوان دادههای متفاوت را با رنگهای متمایز نشان داد. مثلا فرض کنید 10 نقطه داشته باشید که 5 تای آنها از نوع کلاس 1 و مابقی کلاس 2 هستند. با کمک scatter میتوانید این دو دسته داده را با رنگهای متمایز نشان دهید. همچنین با کمک scatter میتوانید سایز مارکرها را تغییر دهید.
خب یعنی برای رسم نمودار پراکندگی از plt.scatter استفاده کنیم؟ بستگی دارد! با این همه امکاناتی که scatter دارد، باز هم بستگی دارد؟ بله. وجود این امکانات که موجب زیباتر شدن نمودارهامیشوند، کمی از سرعت این دستور میکاهد. بنابراین اگر سرعت برایتان مهم هست، از plot استفاده کنید و در غیر این صورت میتوانید از plt.scatter استفاده کنید.
تغییر رنگ در نمودار scatter
در بخشهای قبلی نحوه تغییر رنگ نمودار رسم شده با plot را بررسی کردیم. امکان تغییر رنگ اسکترها در نمودار پراکندگی نیز وجود دارد. به این منظور در دستور scatter یک ورودی c وجود دارد. کافی است نام رنگ موردنظرتان را با روشهای گفته شده در بخش وارد کنید. مثلا برای اینکه مارکرها قرمز باشند، کافی است بنویسید:
x = np.random.randint(0, 10, 20) y = np.random.randint(0, 10, 20) plt.scatter(x, y, marker='^', c='r')
مشاهده میکنید که رنگ تمامی مارکرها قرمز شدهاند. اما یک ویژگی مهم در scatter وجود دارد که آن را نسبت به plot متمایز میکند.
رسم اسکترها با رنگ متفاوت
شما در دستور scatter میتوانید اسکترهایی با رنگهای متفاوت داشته باشید. یعنی چه؟ فرض کنید شما دو دسته نقاط داشته باشید که یک دسته نماینده گروه 1 و مابقی نماینده گروه 2 باشند. حالا در رسم نمودار پراکندگی، شاید بخواهید این دو گروه با رنگهای متمایز نشان داده شوند. دستور scatter این امکان را به شما میدهد. برای این کار شما باید به جای رنگ، برچسب دادهها را به آن بدهید. دادههای زیر را در نظر بگیرید:
x = [ 6, 6, 8, 14, 9, 6, 1, 12, 6, 5] y = [ 3, 13, 6, 4, 5, 8, 4, 8, 9, 12] label = [2, 2, 2, 2, 2, 1, 1, 1, 1, 1]
x و y دادهها و label، برچسب مربوط به هر داده است. یعنی اعداد موجود در label نشان میدهند که هر داده به کدام گروه تعلق دارند. برای اینکه گروه یک و دو با رنگهای متمایز نشان داده شوند، کافی است مقدار c را برابر با label بگذارید:
plt.scatter(x, y, marker='^', c=label)
مشاهده میکنید که دادههای گروه 1 با رنگ بنفش و دادههای گروه 2 با رنگ زرد رسم شدهاند. اگر سه گروه داشتیم چه؟ باز هم باید برچسب هرکدام را مشخص کنید:
x = [ 6, 6, 8, 14, 9, 6, 1, 12, 6, 5] y = [ 3, 13, 6, 4, 5, 8, 4, 8, 9, 12] label = [3, 3, 3, 2, 2, 2, 1, 1, 1, 1] plt.scatter(x, y, marker='^', c=label)
مشاهده میکنید که گروه 3 به رنگ زرد، گروه 2 به رنگ آبی و گروه 1 به رنگ بنفش رسم شدهاند. اما این رنگها از کجا میآیند؟ آیا آنها را نیز میتوان تغییر داد؟ جواب بله است.
cmap چیست؟
رنگ هر کلاس در scatter مطابق با یک ورودی دیگر به نام cmap میتواند تغییر کند. cmap مخفف colormap است. cmap-های متنوعی در matplotlib وجود دارد که در لینک زیر میتوانید انواع آن را ببینید:
یک cmap یا colormap شامل مجموعهای از رنگهاست. یک نمونه cmap را در شکل زیر مشاهده میکنید:
اسم این سی-مپ viridis و سی-مپ پیشفرض scatter است. همانطور که میبینید رنگهای این سی-مپ از بنفش شروع شده و به زرد ختم میشوند. در حالتی که دو گروه داده داشتیم یک رنگ از اول و یک رنگ از آخر این سی-مپ انتخاب شده بود. در حالتی که سه گروه داده داشتیم، رنگها از اول، وسط و آخر cmap انتخاب شدند. حال بیایید نمودار سه کلاسه را با یک cmap دیگر رسم کنیم:
x = [ 6, 6, 8, 14, 9, 6, 1, 12, 6, 5] y = [ 3, 13, 6, 4, 5, 8, 4, 8, 9, 12] label = [3, 3, 3, 2, 2, 2, 1, 1, 1, 1] plt.scatter(x, y, marker='^', c=label, cmap='plasma')
مشاهده میکنید که رنگها تغییر کردهاند. به همین ترتیب میتوانید نمودار پراکندگی را برای هر تعداد کلاس و رنگ دلخواه رسم کنید. در بخش بعدی از آموزش matplotlib در پایتون ، نحوه تغییر سایز مارکرها را خواهید آموخت.
تغییر سایز مارکر در نمودار scatter
بله! شما میتوانید سایز مارکر را نیز تغییر دهید. سایز مارکرها با ورودی s، تنظیم میشود. این ورودی میتواند یک عدد باشد، در این صورت ابعاد همه مارکرها به یک اندازه بزرگ و کوچک میشود. ورودی s میتواند لیست یا آرایهای از اعداد باشد. در این صورت سایز هر مارکر به صورت جداگانه قابل تنظیم است. برویم با چند مثال این دو حالت را بررسی کنیم.
میخواهیم نمودار شکل 20 را یک بار دیگر، این بار با ابعاد بزرگتر رسم کنیم. برای این کار کافی است مثلا s را برابر با 100 بگذارید:
x = [ 6, 6, 8, 14, 9, 6, 1, 12, 6, 5] y = [ 3, 13, 6, 4, 5, 8, 4, 8, 9, 12] label = [2, 2, 2, 2, 2, 1, 1, 1, 1, 1] plt.scatter(x, y, marker='^', c=label, s=100)
مشاهده میکنید که ابعاد مارکرها بزرگتر شد هاند. در مثال بعدی میخواهیم، گروه 2 را بزرگتر از گروه 1 رسم کنیم! میخواهیم مارکرها برای گروه 2 با سایز 200 و برای گروه 1 برابر با 50 باشند. برای این کار یک لیست جدید به نام sizes میسازیم. متناظر با هر گروه، سایز را وارد میکنیم:
sizes = [200, 200, 200, 200, 200, 50, 50, 50, 50, 50]
5 داده اول، گروه 2 و بقیه گروه 1 هستند، پس سایز 5 تای اول را 200 و بقیه را 50 گذاشتیم. مرحله بعد رسم نمودار است. باید مقدار s را برابر با sizes بگذاریم:
plt.scatter(x, y, marker='^', c=label, s=sizes)
به همین ترتیب میتوانید برای هرکدام از مارکرها که بخواهید، سایز را تغییر دهید.
دستور subplot در پایتون
گاهی بهترین راه برای مقایسه چند نمودار این است که آنها را کنار هم قرار دهید. دستور subplot در کتابخانه matplotlib این امکان را میدهد که چند نمودار را در کنار هم رسم کنید. دستور subplot، یک grid از نمودارها ایجاد میکند.
مشاهده میکنید که این grid، بسیار شبیه به یک ماتریس است که جای هر المان یک نمودار نشسته است! ورودی اول دستور subplot، تعداد سطرهای این ماتریس و ورودی دوم، تعداد ستونهای آن را مشخص میکند. ورودی سوم هم مشخص میکند که نموداری که میخواهیم رسم کنیم، کجا رسم شود. اگر ورودی اول M و ورودی دوم N باشد، عددی که سوم وارد میشود عددی بین 1 و M*N باید باشد. اما هرکدام از این اعداد به کدام المان از ماتریس نمودارها اشاره میکنند؟
ورودیهای دستور subplot در پایتون
به شکل 25 نگاه کنید. این نمودار یک ساب-پلات 2 در 3 است. ورودی سوم باید عددی بین 1 و 6 باشد. شماره هر ساب-پلات روی هر نمودار (مربع قرمز رنگ) نوشته شده است. مشاهده میکنید که عدد 1 مربوط به اولین ساب-پلات از سمت چپ است. شمارههای بعدی مربوط به سایر ساب-پلاتهای ردیف اول است. ساب-پلاتهای بعدی از سمت چپِ ردیف دوم شروع و همینطور تا آخر شمارهگذاری میشوند.برویم با یک مثال ببینیم چطور میتوان یک ساب-پلات ساخت.
میخواهیم یک ساب-پلات 2 در 2 بسازیم و نمودارهای y=x، y=sin(x)، y=x**2 و y=cos(x) را رسم کنیم. از y=x شروع میکنیم. اول از همه باید تعیین کنیم که این نمودار را کجا میخواهیم رسم کنیم. چون این نمودار باید در جایگاه 1 رسم شود، باید بنویسیم:
plt.subplot(2, 2, 1)
ورودی سوم را برابر با یک گذاشتیم. با اجرای این دستور، هر نموداری که plot کنیم، در جایگاه 1 رسم خواهد شد. سپس بلافاصله نمودار را رسم میکنیم:
x = np.linspace(0, 10, 100) y1 = x plt.plot(x, y1)
به همین ترتیب بقیه نمودارها را رسم میکنیم:
plt.subplot(2, 2, 2) y2 = np.sin(x) plt.plot(x, y2) plt.subplot(2, 2, 3) y3 = x ** 2 plt.plot(x, y3) plt.subplot(2, 2, 4) y4 = np.cos(x) plt.plot(x, y4)
نتیجه اجرای این کد به شکل زیر است:
به همین ترتیب میتوانید نمودارها را به شکلهای مختلف کنار هم رسم کنید.
دانلود برگه تقلب (cheat sheet) matplotlib
برگه تقلب یا cheat sheet (در برنامهنویسی) به برگهای گفته میشود که نکات و دستورهای مهم یک زبان برنامهنویسی به صورت خلاصه در آن جمعآوری شده است. این برگه میتواند در به خاطر سپردن و یادآوری دستورهای مختلف کمک کننده باشد. برای دانلود چیت شیت matplotlib روی لینک زیر کلیک کنید:
راستی اگر دنبال یادگیری متلب هستید، آموزش متلب هوسم را از دست ندهید. این آموزش شامل بیش از 20 جلسه آموزش رایگان است.
خب! پست آموزش matplotlib در پایتون به پایان رسید. امیدوارم این آموزش مورد توجه شما قرار گرفته باشد. اگر سوالی دارید، پایین صفحه برایمان کامنت کنید. منتظر نظرها و پیشنهادات شما هستیم…
گروه نویسندگان:
الهام پیلوا
پریسا میرزایی
مطالب زیر را حتما مطالعه کنید
شبکه VGG
مهندسی پرامپت
مدل nanoGPT
شگفتانگیزترین ایده هوش مصنوعی از نظر Andrej Karpathy
شبکه ویژن ترنسفورمر
شبکه اتوانکدر
23 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
درود بر شما.بسیار عالی بود.سپاس از جمع آوری و به اشتراک گذاری این مطالب. یه سوالی دارم.برای رسم نمودار که اعداد و دیتاها در یک نرم افزار دیگه باشه و به صورت فایل خروجی داده ها اون رو ذخیره کرده باشم و بخواهیم یه نموداری با اون داده ها رسم کنیم چطوری باید رسم کرد؟یعنی چطوری اون فایل خارجی را اعدادش رو در مت پلات لیب وارد کنیم و نمودارش رو رسم کنیم؟ممنون میشم اگه پاسخ بدید
سلام
باید فایل مدنظرتون رو در پایتون بخونید. مثلا، یک راه رایج ذخیرهسازی دادههای عددی، استفاده از CSV هست. برای خوندن چنین فایلی در پایتون، میشه از Pandas استفاده کرد. برای سایر فایلها (مثلا TXT و غیره) هم لایبرری هست. بعد از خوندن فایل، باید با پایتون و سایر کتابخونهها (مثلا نامپای و پانداس) دادهها رو به شکل مناسبی در بیارید و به دستورهای Matplotlib بدید. درباره نوع فایل، محتویاتش و اهدافتون به ChatGPT توضیح بدید، احتمالا خیلی کمک کنه. همچنین، به نظر میرسه به آشنایی با پایتون و سه کتابخونه نامپای، پانداس و متپلات نیاز دارید.
موفق باشید ⭐
بسیار مطلب کاملی بود ولی یه چیز خیلییی مهم رو توش نگفتین که واقعا انتظار میره توی آموزش فارسی همچین چیزی دیده بشه. اونم اینه که چجوری توی نمودارها از کلمات فارسی استفاده کرد. در واقع چجوری میشه نمودار رو راست چین کرد. الان کلمات توی نمودار برعکس نوشته میشن.
یه جوری با len و کارکتر فاصله سمبل کن بره
سلام و عرض ادب خدمت شما
موقع رسم پلات در Tensorflow با یه خطایی مواجه میشم که متاسفانه دلیلش رو نمیدونم؛ تمام پکیج ها روهم نصب دارم.
کدی که مینویسم به این شکله :
import matplotlib.pyplot as plt
matplotlib inline%
plt.plot( x_data , y_label , ‘*’ )
این هم خطایی که وقتی کد رو ران می کنم برام میاد:
The kernel appears to have died. It will restart automatically.
ممنون میشم راهنمایی کنین.
سلام
مطالب تون عالی بود
سپاس
سلام مجدد
وقتتون بخیر
اگه چند متغیر مثلا با نامهای No,Neq,M و … داشته باشیم و این متغیرها با دادن دادهای متفاوت، هربار تغییر کنن و بخوایم این متغیرها با مقادیرشون رو هربار توی قسمتی از نمودار surface اضافه کنیم تا ببینده متوجه بشه که نمودار به ازای چه مقادیری از این متغیرها رسم شده؛ چیکار باید کنیم؟
به عبارت دیگه، یه قسمت از نمودار surface رو میخوام اختصاص بدم به چند متغیر (مثل یه باکس یا text) که هربار ورودیها عوض میشن، این متغیرها هم که با تغییر ورودیهاشون اعداد جدیدی رو به خودشون میگیرن، توی بالا یا گوشهای از نمودار surface بیان بشن.
مثلا یه گوشه از نمودار surface بشه بنویسم M=2,N=5 (دو تا از متغیرهایی که بیانشون ضروری هست) و هربار ورودیهای عوض میشه، خود برنامه مقادیر جدید رو جای مقادیر قبلی M,N بیاره و نشون بده.
سلام سوالم مرتبط با پایتون هست؛
توی متلب اگه بخوایم یه سطر از نمودار سه بعدی رو رسم کنیم از (:) جلوی متغیر مورد نظر استفاده میکنیم، مثلا
Plot(T(:))
توی پایتون چنین دستوری نداریم؟
سلام
T(:) ماتریس T رو به اصطلاح flat میکنه.
سوال شما بیشتر به نامپای مربوط هست. نامپای کتابخانه پایتونی برای کار با آرایهها هست و شما میتونید آموزشش رو اینجا بخونید👇:
آموزش کتابخانه numpy در پایتون
برای flat کردن آرایه T در نامپای کافیه بنویسید:
T.flatten()
خدا خیرتون بده
این مدت سر این که نمیدونسم اسم این کار چیه تا بتونم پیداش کنم، خیلی اذیت شدم…
واقعا مرسی♥️♥️
سلام . عالی
مختصر و مفید .
خیلی عالی و مفید . با تشکر از شما
ممنون از آموزشتون
سلام میشه در نمودار از تقویم شمسی استفاده کرد؟ یا تبدیل کرد تاریخ رو؟
یا جوری بشه تو xticklabels محاسبه کرد.
مرسی
خیلی خوب بود مرسی
خیلی عالی بود. ممنون بابت آموزش
ممنون 🌹🙏
بسیار عالی.بهترین نکات در خلاصه ترین صورت ممکن
ممنون 🌹🙏
خوب و مختصر و مفید
دمتون گرم
فقط تمرین نیاز داره
ممنون امیرحسین عزیز،
انشالله در آپدیتهای بعدی سعی میکنیم تمرین هم بذاریم🙏🌹
سلام و خسته نباشید . matplotlib@
را چطور باید استفاده کنم؟ در جایی دیدم که کتابخانه panda و numpy و lppls را ایمپورت کرده بود و زیر آنها دستور matplotlib@ را استفاده کرده بود؟؟ بدون ایمپورت کتابخانه matplot لطفا راهنمایی کنید