رسم نمودار در پایتون با Matplotlib — راهنمای کاربردی

۲۲۶۴ بازدید
آخرین به‌روزرسانی: ۱۳ تیر ۱۴۰۲
زمان مطالعه: ۴ دقیقه
رسم نمودار در پایتون با Matplotlib — راهنمای کاربردی

«کتابخانه مت‌پلات‌لیب» (Matplotlib Library)، یک کتابخانه ترسیم نمودار برای «زبان برنامه‌نویسی پایتون» (Python Programming Language) است. این کتابخانه، یک «رابط کاربری برنامه‌نویسی شی‌گرا» (Object-Oriented Application Programming Interface) برای توکار کردن نمودارها در نرم‌افزارهای کاربردی با استفاده از «مجموعه ابزارهای رابط کاربری گرافیکی همه منظوره» (General-Purpose GUI Toolkits) مانند Tkinter ،wxPython، «کیوت» (Qt) و «جی‌تی‌کی» (GTK) فراهم می‌کند. همچنین، یک رابط «رویه‌ای» (Procedural) به نام «pylab» بر مبنای «ماشین حالات متناهی» (State Machine) (مانند OpenGL) نیز دارد که با هدف ساخت نمونه‌ای مشابه آنچه در «متلب» (Matlab) وجود دارد ساخته شده است. کتابخانه «سای‌پای» (SciPy) نیز از Matplotlib استفاده می‌کند. در ادامه، مبحث رسم نمودار در پایتون با کتابخانه matplotlib مورد بررسی قرار خواهد گرفت.

رسم نمودار در پایتون با Matplotlib

Matplotlib در اصل توسط «جان هانتر» (John D. Hunter) که یک «عصب‌پژوه» (Neurobiologist) است نوشته شده و دارای یک تیم توسعه فعال است. این کتابخانه، تحت «پروانه شبیه بی‌اس‌دی» (BSD-Style License) توزیع شده است.

«مایکل دروئت‌بوم» (Michael Droettboom) مدت کوتاهی پیش از مرگ جان هانتر (در آگوست ۲۰۱۲ دیده از جهان فروبست)، به سمت مدیر نرم‌افزاری (توسعه‌دهنده مدیر) مت‌پلات‌لیب منصوب شد. نسخه‌های گوناگون کتابخانه Matplotlib برای نسخه‌های مختلف پایتون (۲ و ۳) طراحی شده‌اند، اما با توجه به امضا «بیانیه پایتون ۳» توسط تیم مت‌پلات‌لیب، پس از سال ۲۰۲۰ این کتابخانه از پایتون ۲ پشتیبانی نخواهد کرد.

کتابخانه Matplotlib و متلب

Pyplot یک ماژول از کتابخانه رسم نمودار Matplotlib است که رابطی متلب مانند فراهم می‌کند. Matplotlib به گونه‌ای طراحی شده که به اندازه متلب (و حتی بیش از آن) کاربردی باشد و علاوه بر این، از مزیت کار با پایتون، «متن‌باز» (Open-Source) و رایگان بودن نیز بهره می‌برد.

چرا Matplotlib برای داده‌های فضایی

در ادامه، تجربه «لورا لوئیس» (Laura Lewis)، دانشمند و تحلیل‌گر داده را پیرامون کار با کتابخانه Matplotlib برای رسم نمودار در پایتون، می‌خوانید:

«به عنوان بخشی از پروژه پیش‌بینی قیمت خانه‌ها، مجموعه داده بزرگی از قیمت خانه‌ها را که مربوط به شهرستان کینگ (King County) ایالت واشینگتن در ایالات متحده آمریکا بود، در اختیار داشتم. این مجموعه داده، شامل طیف وسیعی از داده‌های مرتبط با خانه‌ها، شامل طول و عرض جغرافیایی هر خانه‌ای می‌شود که در طول یک سال گذشته فروخته شده است. از آنجا که طول و عرض جغرافیایی، هر دو داده‌های عددی پیوسته هستند، بهتر است روی آن‌ها با استفاده از «مدل رگرسیون خطی چندگانه» (Multiple Linear Regression Model) کار شود. اگرچه، حتی پیش از رسیدن به این مرحله در پروژه، مشاهده مقادیر طول و عرض جغرافیایی در مجموعه داده، حاکی از آن است که با یک مساله هیجان‌انگیز ترسیم داده‌های «فضایی» (Spatial) مواجه هستیم.

نرم‌افزارهای صفحه گسترده رایگان یا ارزان قیمت متعددی با توابع ویژه ترسیم نمودار، از «اکسل پاور مپ» (Excel Power Map) گرفته تا «گوگل مای مپس» (Google My Maps)، وجود دارند. اگرچه، تنها با چند خط کد پایتون، می‌توان بصری‌سازی‌های نقشه مانند را با سرعت و قابلیت‌های بیشتری برای سفارشی‌سازی ترسیم کرد. در این راستا، فرد نیازی به کسب شناخت پیرامون کتابخانه‌های تحلیل‌های جغرافیایی ندارد. در واقع، مادامی که شما طول و عرض جغرافیایی را در مجموعه داده خود دارید، می‌توانید آن را با استفاده از کتابخانه matplotlib بصری‌سازی کنید.»

هیستوگرام دو‌ بُعدی

بافت‌نگارها (هیستوگرام‌ها | Histograms) راهکاری مناسب برای بصری‌سازی توزیع متغیرها در یک مجموعه داده هستند. آن‌ها این کار را با نمایش تعداد ورودی‌ها در مجموعه داده که بر یک طیف مقداری مشخص یا «دسته‌ها» (Bins) تکیه دارد، انجام می‌دهند.

کد زیر، یک نمودار ساده (تک‌بُعدی) را برای طول و عرض جغرافیایی در مجموعه داده King County (به صورت مخفف KC) رسم می‌کند.

1import matplotlib.pyplot as plt
2fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))
3fig.suptitle(‘Distributions of latitude and longitude in the King County housing dataset’, fontsize=16)
4ax1.hist(kc.lat)
5ax1.set_xlabel(‘Latitude’, fontsize=13)
6ax1.set_ylabel(‘Frequency’, fontsize=13)
7ax2.hist(kc.long)
8ax2.set_xlabel(‘Longitude’, fontsize=13)
9ax2.set_ylabel(‘Frequency’, fontsize=13);

کتابخانه Matplotlib

این کار برای نمایش دادن توزیع هر یک از متغیرها به طور مستقل خوب است، اما واقعا درکی از اینکه چنین طول و عرضی به صورت جغرافیایی چگونه به نظر می‌رسند ارائه نمی‌کند. در اینجا، به یک نقشه نیاز است. خوشبختانه، می‌توان با استفاده از یک هیستوگرام دوبعدی به این مورد دست پیدا کرد.

برای این کار، دو نمودار مجزای بالا به نوعی ترکیب می‌شوند و در بافت‌نگار جدید، محور x‌ها نشانگر طول جغرافیایی و محور y نمایش دهنده عرض جغرافیایی است. در این نمودار دوبُعدی، به جای آنکه مانند نمودار تک‌بُعدی، دسته‌ها، پهنای هر میله از نمودار را تعیین کنند، دسته‌ها به صورت شبکه‌ای (Grid) هستند (مربعی از دو بعد). می‌توان یک نوار رنگی نیز با استفاده از ()plt.colorbar به نمودار اضافه کرد تا به بصری‌سازی این مورد به صورت یک «نقشه گرمایشی» (Heatmap) کمک کند.

1plt.figure(figsize = (10,8))
2plt.hist2d(kc.long, kc.lat, bins=150, cmap=’hot’)
3plt.colorbar().set_label(‘Number of properties’)
4plt.xlabel(‘Longitude’, fontsize=14)
5plt.ylabel(‘Latitude’, fontsize=14)
6plt.title(‘Number of properties in each area of King County, Washington’, fontsize=17)
7plt.show()

رسم نمودار با Matplotlib

در صورتی که با دقت و از زوایای گوناگون به این نمودار نگاه شود، می‌توان شکل شهرستان کینگ، «سیاتل» (Seattle) در سمت بالا چپ و «دریاراه پیوجت» (Puget Sound) را مشاهده کرد.

ترسیم نمودار در پایتون با Matplotlib

نمودار نقطه‌ای با سه متغیر

راهکار دیگر برای ترسیم نمودار داده‌های فضایی در پایتون و با استفاده از Matplotlib، استفاده از نمودار نقطه‌ای است. نمودار نقطه‌ای رابطه بین دو متغیر، روی محور x و y را با ترسیم نقاط برای هر نقطه داده روی مقادیر آن در محور x و y انجام می‌دهد.. مت‌پلات‌لیب این امکان را فراهم می‌کند که یک گام فراتر رفته و از متغیر سوم برای تغییر رنگ (شکل یا انداره) هر نقطه داده‌ای مطابق با مقدار نقطه داده برای این متغیر استفاده شود.

مجموعه داده King County، شامل قیمت خانه‌های فروخته شده است که بر اساس متراژ ساخت خانه به دست آمده است. با نگاهی به نمودار دو‌بُعدی بالا، می‌تون مشاهده کرد که املاک زیادی در اطراف سیاتل وجود دارند؛ اما در عین حال، املاکی نیز دورتر از شهر موجود هستند. اندازه خانه‌ها به شکلی غیر تصادفی (و با دلیل مشخص) از ناحیه‌ای به ناحیه دیگر متفاوت است. برای مثال،‌ اندازه خانه‌ها در شهر کوچک‌تر و در شهرستان بزرگ‌تر است. بنابراین، یک سنجه بهتر برای مقایسه، سنجه Like for like (یا همان LFL) برای مقایسه قیمت خانه‌ها به ازای هر متر مربع است. در این نمودار نقطه‌ای، طول‌ها و عرض‌های جغرافیایی ترسیم شده‌اند و نقاط داده بر اساس قیمتی که به ازای هر متر مربع دارند، رنگی شده‌اند تا نموداری از اینکه قیمت خانه در هر ناحیه چقدر گران است حاصل شود.

1plt.figure(figsize = (10,8))
2plt.scatter(kc.long, kc.lat ,c=kc.price_per_sqft, cmap = ‘hot’, s=1)
3plt.colorbar().set_label(‘Price per square foot ($), fontsize=14)
4plt.xlabel(‘Longitude’, fontsize=14)
5plt.ylabel(‘Latitude’, fontsize=14)
6plt.title(‘House prices in King County, Washington’, fontsize=17)
7plt.show()

رسم نمودار در پایتون

جای تعجبی ندارد که گران‌ترین املاک (بر اساس قیمت به ازای متر مربع)، در شهرهای «بلویو» (Bellevue) و «مدینا» (Medina) قرار دارند؛ زیرا، خانه‌های «بیل‌گیتس» (Bill Gates) و «جف بیزوس» (Jeff Bezos) و برخی از گرانترین «زیپ‌کدهای» (Zipcodes) کشور در این شهرها قرار دارند.

جمع‌بندی

در این مطلب، ابتدا کتابخانه پایتون matplotlib که از قدرتمندترین کتابخانه‌های بصری‌سازی است، معرفی شد. سپس، با طرح مثال‌های عملی، روش رسم نمودار در پایتون با استفاده از matplotlib تشریح شد.

اگر نوشته بالا برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

^^

بر اساس رای ۱۴ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
medium.com/@lvlewis8
نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *