آیا می خواهید بدانید چگونه از پایتون برای ترسیم و تصویر سازی داده ها استفاده می شود؟ آیا علاقه مند به یادگیری یکی از پرکاربردترین کتابخانه های تجسم داده در پایتون هستید؟ اگر چنین است، جای درستی آمده اید.
در این قسمت از یک آموزش دو قسمتی، نحوه استفاده از MATPLOTLIB ، یکی از پرکاربردترین کتابخانه های تجسم داده در پایتون را یاد خواهیم گرفت. در طول هر دو مقاله، انواع مختلفی از نمودارها را ایجاد خواهیم کرد، از جمله:
- نمودارهای خطی
- هیستوگرام ها
- نمودار های میله ای
- نمودار های پراکنده
- نمودار های استک
- نمودارهای دایره ای
همچنین خواهیم دید که چه توابع و ماژول های مختلفی در matplotlib موجود است.
در این قسمت، نحوه ایجاد نمودارهای خطی و هیستوگرام با matplotlib را بررسی خواهیم کرد. علاوه بر ترسیم نمودارها، نحوه تغییر اندازه پیشفرض نمودارها و نحوه افزودن برچسبها، عنوانها و legendها به محورهای آنها را نیز خواهیم دید.
نصب کتابخانه Matplotlib
ساده ترین راه برای نصب matplotlib استفاده از نصب کننده pip است که با اکثر نصب های استاندارد پایتون ارائه می شود. دستور زیر را از ترمینال دلخواه خود اجرا کنید:
pip install matplotlib
اگر از توزیع Anaconda پایتون استفاده می کنید، می توانید از دستورات ذکر شده در اسناد رسمی ANACONDA برای نصب کتابخانه matplotlib نیز استفاده کنید.
وارد کردن کتابخانه های مورد نیاز: Numpy و MatplotLib.pyplot
هنگامی که matplotlib را نصب کردیم، مرحله بعدی وارد کردن کتابخانه های مورد نیاز است. کتابخانه pyplot در matplotlib برای رسم انواع مختلف نمودارها استفاده می شود. آن را همراه با کتابخانه NUMPY وارد می کنیم.
در بخش بعدی خواهید دید که دقیقاً چگونه می توانیم از این دو کتابخانه استفاده کنیم. در حال حاضر، اسکریپت زیر را برای وارد کردن آنها اجرا کنید:
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
از آنجایی که من از Jupyter Notebook برای اجرای اسکریپتهای این مقاله استفاده میکنم، باید عبارت %matplotlib
را به صورت درون خطی اجرا کنم، که به IDE میگوید نمودارها را در رابط خود رسم کند. اگر از یک IDE مانند این استفاده نمی کنید، نیازی به اجرای این عبارت (خط دوم) ندارید.
نکته مهم دیگری که باید به آن توجه کنید این است که ما هنگام وارد کردن pyplot
نام آن را به plt
تغییر دادیم، زیرا تایپ کردن آن آسان تر است و یک نام مستعار استاندارد برای pyplot
است. از این پس در این مقاله، از این نام مستعار استفاده خواهیم داد.
اکنون، همه چیزهایی را که برای شروع رسم انواع مختلف نمودارهای matplotlib نیاز است، در اختیار داریم.
تغییر اندازه پلات با استفاده از pyplot
برای مشاهده اندازه طرح پیش فرض نمودارهای ترسیم شده توسط plt
اسکریپت زیر را اجرا کنید:
plot_size = plt.rcParams["figure.figsize"]
print(plot_size[0]) #6
print(plot_size[1]) #4
در اسکریپت بالا، از ویژگی rcParams
در ماژول plt
و ارسال مقدار figure.figsize
به عنوان پارامتر استفاده کردهایم که فهرستی حاوی عرض و ارتفاع پیشفرض نمودار را برمیگرداند. ایندکس اول عرض و ایندکس دوم ارتفاع است. هر دو مقدار روی صفحه چاپ می شوند. 6 و 4 را در خروجی مشاهده خواهید کرد، یعنی عرض پیش فرض نمودار 6 اینچ و ارتفاع پیش فرض 4 اینچ است.
برای تغییر اندازه طرح، اسکریپت زیر را اجرا کنید:
plot_size[0] = 8
plot_size[1] = 6
plt.rcParams["figure.figsize"] = plot_size
در کد بالا، عرض و ارتفاع نمودار را به ترتیب به 8 و 6 اینچ تغییر دادیم.
طرح های خطی
نمودار خطی ساده ترین نمودار در کتابخانه matplotlib است. این نمودار رابطه بین مقادیر محورهای x و y را در قالب یک منحنی نشان می دهد.
برای ایجاد نمودار خطی می توانید از تابع plot
از ماژول plt
استفاده کنید. اولین آرگومان تابع plot
لیست مقادیری است که می خواهید در محور x نمایش دهید. و آرگومان دوم لیست مقادیری است که باید روی محور y رسم شوند. به مثال زیر دقت کنید:
plt.plot([-3,-2,-1,0,1,2,3],[9,4,1,0,1,4,9])
plt.show()
در اسکریپت بالا، ما شش مقدار در لیست برای محور x داریم و در محور y، مربع مقادیر x را داریم. این بدان معنی است که نمودار خطی تابع مربع را نشان می دهد، همانطور که در خروجی می بینید. توجه داشته باشید که رنگ طرح پیش فرض برای نمودارهای matplotlib آبی است.
ذکر این نکته ضروری است که اگر از ویرایشگری غیر از Jupyter Notebook استفاده می کنید، باید عملکرد show
از ماژول plt
را فراخوانی کنید. اما در Jupyter، فراخوانی تابع show اختیاری است.
تولید منحنی های نرم
به جای وارد کردن دستی مقادیر لیست ها برای محور x و y، می توانیم از تابع linspace از کتابخانه numpy استفاده کنیم. این تابع برای تولید مقادیر سه آرگومان می گیرد: کران پایینی، کران بالایی، و تعداد نقاط با فاصله مساوی بین کران پایین و بالا. به اسکریپت زیر نگاه کنید:
x = np.linspace(-15, 14, 30)
y = np.power(x,3)
plt.plot(x, y, "rebeccapurple")
plt.show()
در اسکریپت بالا، ما از تابع power از کتابخانه numpy نیز برای محاسبه مکعب هر عنصر در آرایه x استفاده کردیم. در خروجی، خط تابع مکعب به رنگ بنفش نمایش داده می شود، چرا که مقدار rebeccapurple
را به عنوان سومین پارامتر تابع plot
مشخص کردهایم.
نکته برای مبتدیان: یک تابع در برنامه نویسی عملیات خاصی را انجام می دهد . برای ارسال داده به یک تابع، از آرگومان استفاده می کنیم. سپس تابع از آرگومان های ارسال شده به آن استفاده می کند. به عنوان مثال، در تابع plot، اولین پارامتر، داده ای است که روی محور x رسم می شود، دومین پارامتر داده ای است که روی محور y رسم می شود و پارامتر سوم، کد رنگ است. کد رنگ rebeccapurple
مربوط به نوعی رنگ بنفش است.
در اینجا نموداری از رنگ های دیگر آورده شده است که می توانید استفاده کنید:
خروجی به شکل زیر است:
اضافه کردن برچسب ها، عنوان و توضیحات
برای افزودن برچسب به محورهای x و y، میتوانید از توابع xlabel
و ylabel
از ماژول plt
استفاده کنید. به طور مشابه، برای اضافه کردن عنوان، میتوانید از تابع title
مطابق شکل زیر استفاده کنید:
x = np.linspace(-15, 14, 30)
y = np.power(x,3)
plt.xlabel("input")
plt.ylabel("output")
plt.title("Cube Root")
plt.plot(x, y, "deepskyblue")
plt.show()
در خروجی، باید برچسب ها و عنوان محور خود را ببینید:
برای افزودن توضیحات به نمودار خود، باید مقداری را برای ویژگی label
تابع plot ارسال کنید، همانطور که در زیر نشان داده شده است:
x = np.linspace(-15, 14, 30)
cube = np.power(x,3)
square = np.power(x,2)
plt.xlabel("input")
plt.ylabel("output")
plt.title("Cube Root")
plt.plot(x, cube, "rebeccapurple", label = "Cube")
plt.plot(x, square , "deepskyblue", label = "Square")
plt.legend()
plt.show()
در اسکریپت بالا دو نمودار داریم: یکی برای تابع مربع و دیگری برای تابع مکعب. برای کمک به تمایز این دو، ما نه تنها میتوانیم از رنگهای مختلف استفاده کنیم، بلکه میتوانیم توضیحاتی را نیز بگنجانیم که به وضوح نشان دهد کدام نمودار برای چه است. در کد بالا، توضیحات طرح مکعب Cube نامگذاری شده است و به رنگ بنفش کشیده خواهد شد. توضیحات طرح مربع Square نام دارد و به رنگ آبی کشیده خواهد شد. خروجی اسکریپت بالا به شکل زیر است:
نکته: چگونه می توان نموداری های خطی Matplotlib را بهبود بخشید
همچنین می توانید نشانگرهایی را به نقاط داده در نمودار خطی اضافه کنید. برای انجام این کار، باید مقداری را برای پارامتر marker از تابع plot به شکل زیر ارسال کنید:
x = np.linspace(-15, 14, 30)
x = np.linspace(-15, 14, 30)
cube = np.power(x,3)
square = np.power(x,2)
plt.xlabel("input")
plt.ylabel("output")
plt.title("Cube Root")
plt.plot(x, cube, "rebeccapurple", marker = "o", label = "Cube")
plt.plot(x, square , "deepskyblue", marker = "v", label = "Square")
plt.legend()
plt.show()
در اسکریپت بالا، o
را به عنوان مقدار marker تابع مکعب مشخص کردیم. این مقدار، دایره هایی را برای نقاط داده ایجاد می کند. به طور مشابه، برای تابع مربع، v
را به عنوان مقدار marker مشخص کردیم. این نماد، از یک مثلث وارونه برای نقاط استفاده می کند:
کدهای تولید انواع مختلف نشانگرها در matplotlib را میتوانید در اینجا پیدا کنید .
هیستوگرام ها
یک هیستوگرام توزیع داده ها را در قالب فواصل داده ای به نام «bin» نشان می دهد. برای رسم هیستوگرام، باید تابع hist
از ماژول plt
را فراخوانی کنید. آرگومان اول مجموعه داده ها، دومی bin ها و سومی نوع هیستوگرامی است که می خواهید رسم کنید. همچنین می توانید از آرگومان اختیاری rwidth
استفاده کنید که عرض هر بازه یا “bin” را در هیستوگرام مشخص می کند. به مثال زیر نگاه کنید:
stock_prices = [23,21,43,32,45,34,56,23,67,89,23,21,43,32,45,34,56,23,67,89,23,21,43,32,45,34,56,23,67,89]
bins = [20,40,60,80,100]
plt.hist(stock_prices, bins, color = "rebeccapurple", histtype="bar", rwidth=0.9)
plt.show()
در اسکریپت بالا، داده های فرضی از میانگین قیمت سهام سی شرکت داریم. پنج bin برای فواصل داده تعریف می کنیم. سپس از تابع hist
برای رسم این داده ها استفاده می کنیم. خروجی به شکل زیر است. (15 شرکت داریم که میانگین قیمت سهام آنها بین 20 تا 40 است. و برای بقیه بازه ها نیز به همین شکل توزیع داده ها را محاسبه می کنیم):
همچنین می توانید یک هیستوگرام افقی ایجاد کنید . برای انجام این کار، فقط باید مقدار horizontal
را به عنوان مقدار پارامتر orientation
در تابع hist
وارد کنید:
stock_prices = [23,21,43,32,45,34,56,23,67,89,23,21,43,32,45,34,56,23,67,89,23,21,43,32,45,34,56,23,67,89]
bins = [20,40,60,80,100]
plt.hist(stock_prices, bins, color = "deepskyblue", histtype="bar", rwidth=0.9, orientation = "horizontal")
plt.show()
در خروجی، هیستوگرام افقی را مطابق شکل زیر مشاهده خواهید کرد:
نکته: چگونه هیستوگرام Matplotlib خود را بهبود بخشید
علاوه بر هیستوگرام های یک بعدی، می توانید هیستوگرام های دو بعدی را نیز ترسیم کنید. برای انجام این کار، به مقادیری برای محور x و y هیستوگرام دو بعدی نیاز دارید. تابع hist2d
برای رسم هیستوگرام های دو بعدی استفاده می شود:
stock_prices = [23,21,43,32,45,34,56,23,67,89]
years =[2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018]
plt.hist2d(stock_prices, years)
plt.show()
این اسکریپت قیمت سهام را در برابر سالهایشان به شکل زیر ترسیم میکند:
توجه: طول دو مجموعه باید با هم برابر باشد.
در مقابل هر سال مقدار آن در بازه bin مشخص شده ترسیم می شود. (در تابع hist2d ویژگی bins به صورت پیش فرض 10 است.)
- در سال 2009 مقدار معادل در مجموعه stock_prices برابر با 23 است.
- داده های محور افقی از 21 تا 89 است پس محور افقی از 21 تا 89 به 10 (مقدار bin) قسمت تقسیم می شود. پس اولین بازه بین 21 تا 27.8 است.
- داده ها محور عمودی از 2009 تا 2018 است. محور عمودی نیز به 10 قسمت تقسیم می شود. یعنی اولین بازه عمودی بین 2009 تا 2009.9 است.
- در نتیجه داده اول که 23 و در سال 2009 است به صورت یک مربع در بازه 21 تا 27.8 افقی و 2009 تا 2009.9 عمودی رسم خواهد شد. و به همین ترتیب برای بقیه داده ها.
- نکته: اگر دو بازه مشترک داشته باشیم رنگ آن با رنگ بقیه مستطیل ها متفاوت خواهد شد.
در اینجا، ما به یک مقدمه کوتاه برای رسم داده ها در پایتون با نمودارهای ساده مانند نمودارهای خطی و هیستوگرام، همراه با انواع آنها نگاه کردیم. در قسمت دوم این مجموعه، نحوه ایجاد نمودارهای میلهای، نمودارهای پشتهای، نمودارهای پراکنده و نمودار های دایره ای را خواهید آموخت.
دیدگاهها