وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

پلات پراکنده Matplotlib با پلات های توزیع (نقشه مشترک) – آموزش و مثال

0 2
زمان لازم برای مطالعه: 6 دقیقه


معرفی

کتابخانه های تجسم داده های زیادی در پایتون وجود دارد، با این حال Matplotlib محبوب ترین کتابخانه در بین همه آنهاست. محبوبیت Matplotlib به دلیل قابلیت اطمینان و کاربردی بودن آن است – قادر است هر دو طرح ساده و پیچیده را با کد کمی ایجاد کند. شما همچنین می توانید طرح ها را به روش های مختلف سفارشی کنید.

در این آموزش به آن خواهیم پرداخت چگونه یک طرح مشترک در Matplotlib ترسیم کنیم که شامل الف طرح پراکنده و متعدد قطعه های توزیع روی همان Figure.

نمودارهای مشترک برای بررسی روابط بین داده های دو متغیره و همچنین توزیع آنها به طور همزمان استفاده می شود.

توجه داشته باشید: این نوع کار است بسیار مناسب تر برای کتابخانه هایی مانند Seaborn که دارای داخلی است jointplot() تابع. با Matplotlib، یک Joint Plot را به صورت دستی و با استفاده از آن می سازیم GridSpec و متعدد Axes به جای اینکه Seaborn این کار را برای ما انجام دهد.

وارد کردن داده ها

ما از معروف استفاده خواهیم کرد مجموعه داده عنبیه، از آنجایی که می توانیم رابطه بین ویژگی هایی مانند SepalWidthCm و SepalLengthCm از طریق یک طرح پراکنده، اما همچنین توزیع های بین Species ویژگی با در نظر گرفتن طول/عرض کاسبرگ خود، از طریق پلات های توزیع همزمان.

اجازه دهید import مجموعه داده و نگاهی به:

import pandas as pd

df = pd.read_csv('iris.csv')
print(df.head())

این نتیجه در:

   Id  SepalLengthCm  SepalWidthCm  PetalLengthCm  PetalWidthCm      Species
0   1            5.1           3.5            1.4           0.2  Iris-setosa
1   2            4.9           3.0            1.4           0.2  Iris-setosa
2   3            4.7           3.2            1.3           0.2  Iris-setosa
3   4            4.6           3.1            1.5           0.2  Iris-setosa
4   5            5.0           3.6            1.4           0.2  Iris-setosa

ما رابطه دو متغیره بین آن را بررسی خواهیم کرد SepalLengthCm و SepalWidthCm ویژگی‌های اینجا، بلکه توزیع‌های آن‌ها. ما می‌توانیم از دو طریق به این موضوع برخورد کنیم – با توجه به آنها Species یا نه.

ما می توانیم کاملاً نادیده بگیریم Species ویژگی، و به سادگی هیستوگرام های توزیع هر نمونه گل را رسم کنید. از سوی دیگر، می‌توانیم نمودارهای توزیع هر نمونه گل را کد رنگ و رسم کنیم و تفاوت آنها را برجسته کنیم. Species همچنین.

کاوش خواهیم کرد هر دو گزینه‌ها در اینجا، با ساده‌تر شروع می‌شوند – بدون توجه به Species در مجموع

یک طرح مشترک در Matplotlib با هیستوگرام های تک کلاسی ترسیم کنید

در رویکرد اول، ما فقط نمونه های گل را بارگذاری می کنیم و آنها را همانطور که هست رسم می کنیم، بدون توجه به آنها Species.

ما از a استفاده خواهیم کرد GridSpec برای سفارشی کردن چیدمان شکل خود، برای ایجاد فضا برای سه طرح مختلف و Axes نمونه ها

برای استناد به GridSpec سازنده، ما می خواهیم import آن را در کنار نمونه PyPlot:

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec

حال ، بیایید ما را بسازیم Figure و ایجاد کنید Axes اشیاء:

df = pd.read_csv('iris.csv')

fig = plt.figure()
gs = GridSpec(4, 4)

ax_scatter = fig.add_subplot(gs(1:4, 0:3))
ax_hist_y = fig.add_subplot(gs(0,0:3))
ax_hist_x = fig.add_subplot(gs(1:4, 3))

plt.show()

ما 3 ایجاد کرده ایم Axes نمونه ها، با اضافه کردن نمودارهای فرعی به شکل، با استفاده از ما GridSpec به عنوان مثال برای قرار دادن آنها. این منجر به یک Figure با 3 خالی Axes موارد:

matplotlib gridspec برای مشترک پلات

اکنون که چیدمان و موقعیت یابی را در جای خود قرار داده ایم، تنها کاری که باید انجام دهیم این است که داده ها را رسم کنیم روی ما Axes. بیایید اسکریپت را به‌روزرسانی کنیم تا آن را ترسیم کنیم SepalLengthCm و SepalWidthCm ویژگی ها از طریق طرح پراکندگی، روی ما ax_scatter محورها و هر یک از این ویژگی ها روی را ax_hist_y و ax_hist_x محورها:

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec

df = pd.read_csv('iris.csv')

fig = plt.figure()
gs = GridSpec(4, 4)

ax_scatter = fig.add_subplot(gs(1:4, 0:3))
ax_hist_x = fig.add_subplot(gs(0,0:3))
ax_hist_y = fig.add_subplot(gs(1:4, 3))

ax_scatter.scatter(df('SepalLengthCm'), df('SepalWidthCm'))

ax_hist_x.hist(df('SepalLengthCm'))
ax_hist_y.hist(df('SepalWidthCm'), orientation = 'horizontal')

plt.show()

ما تنظیم کرده ایم orientation از ax_hist_y به horizontal به طوری که به صورت افقی ترسیم شود، روی در سمت راست نمودار پراکندگی، در همان جهتی که محورهای خود را با استفاده از GridSpec:

نمودار مشترک ساده matplotlib با هیستوگرام یک کلاس

این منجر به یک طرح مشترک از رابطه بین SepalLengthCm و SepalWidthCm ویژگی ها، و همچنین توزیع برای ویژگی های مربوطه.

یک طرح مشترک در Matplotlib با هیستوگرام های چند کلاسه ترسیم کنید

حال، مورد دیگری که ممکن است بخواهیم بررسی کنیم، توزیع این ویژگی‌ها با توجه به Species از گل، زیرا ممکن است بر دامنه طول و عرض کاسبرگ تأثیر بگذارد.

برای این، ما فقط از یک هیستوگرام برای هر محور، که در آن هر محور وجود دارد، استفاده نخواهیم کرد تمام نمونه های گل، اما در عوض، ما یک هیستوگرام را برای هر یک قرار می دهیم Species روی هر دو محور

برای انجام این کار، ابتدا باید آن را تشریح کنیم DataFrame ما قبلاً از گل استفاده کرده ایم Species:

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec

df = pd.read_csv('iris.csv')

setosa = df(df('Species')=='Iris-setosa')
virginica = df(df('Species')=='Iris-virginica')
versicolor = df(df('Species')=='Iris-versicolor')
species = df('Species')
colors = {
    'Iris-setosa' : 'tab:blue', 
    'Iris-versicolor' : 'tab:red',
    'Iris-virginica' : 'tab:green'
    }

در اینجا ، ما فقط فیلتر کرده ایم DataFrame، توسط Species ویژگی در سه مجموعه داده جداگانه. این setosa، virginica و versicolor مجموعه داده ها در حال حاضر فقط شامل نمونه های مربوطه خود هستند.

خوب همچنین می‌خواهید هر یک از این نمونه‌ها را با رنگ متفاوتی رنگ کنید روی آنها Species، هم در Scatter Plot و هم در Histograms. برای این ، ما به سادگی یک را قطع کرده ایم Series از Species ویژگی، و ساخته شده است colors فرهنگ لغت، که ما از آن استفاده خواهیم کرد map() را Species از هر گل به یک رنگ بعد روی.

حالا بیایید خودمان را بسازیم Figure، GridSpec و Axes موارد:

fig = plt.figure()
gs = GridSpec(4, 4)

ax_scatter = fig.add_subplot(gs(1:4, 0:3))
ax_hist_y = fig.add_subplot(gs(0,0:3))
ax_hist_x = fig.add_subplot(gs(1:4, 3))

در نهایت، می‌توانیم نمودار پراکندگی و هیستوگرام را ترسیم کنیم و رنگ‌ها و جهت‌گیری‌های آن‌ها را بر اساس آن تنظیم کنیم:

ax_scatter.scatter(df('SepalLengthCm'), df('SepalWidthCm'), c=species.map(colors))

ax_hist_y.hist(versicolor('SepalLengthCm'), color='tab:red', alpha=0.4)
ax_hist_y.hist(virginica('SepalLengthCm'), color='tab:green', alpha=0.4)
ax_hist_y.hist(setosa('SepalLengthCm'), color='tab:blue', alpha=0.4)

ax_hist_x.hist(versicolor('SepalWidthCm'), orientation = 'horizontal', color='tab:red', alpha=0.4)
ax_hist_x.hist(virginica('SepalWidthCm'), orientation = 'horizontal', color='tab:green', alpha=0.4)
ax_hist_x.hist(setosa('SepalWidthCm'), orientation = 'horizontal', color='tab:blue', alpha=0.4)

plt.show()

این map() نتیجه تماس در a Series از رنگ ها:

0       tab:blue
1       tab:blue
2       tab:blue
3       tab:blue
4       tab:blue
         ...
145    tab:green
146    tab:green
147    tab:green
148    tab:green
149    tab:green

هنگامی که به c استدلال از scatter() تابع، رنگ‌ها را به این ترتیب به نمونه‌ها اعمال می‌کند و به طور مؤثر هر نمونه را با رنگی متناسب با گونه‌های آن رنگ‌آمیزی می‌کند.

برای هیستوگرام ها، ما به سادگی سه نمودار، یکی برای هر کدام را ترسیم کرده ایم Species، با رنگ های مربوطه خود. شما می توانید یک را انتخاب کنید step هیستوگرام در اینجا، و نیشگون گرفتن و کشیدن alpha ارزش برای ایجاد توزیع هایی با ظاهر متفاوت.

اجرای این کد نتیجه می دهد:

نمودار مشترک matplotlib با هیستوگرام چند کلاسه

حالا هر کدام Species رنگ و توزیع خاص خود را دارد که جدا از سایر گلها ترسیم شده است. علاوه بر این، آنها با طرح Scatter Plot با رنگ کدگذاری شده اند، بنابراین یک طرح واقعا بصری است که به راحتی قابل خواندن و تفسیر است.

توجه داشته باشید: اگر رنگ‌های همپوشانی، مانند نارنجی که از هیستوگرام‌های قرمز و آبی تشکیل شده است، حواس‌تان را پرت می‌کند، تنظیم کنید histtype به step رنگ های پر شده را حذف می کند:

نمودار مشترک matplotlib، هیستوگرام پله

نتیجه

در این راهنما، نگاهی به روش رسم a انداخته ایم طرح مشترک در Matplotlib – یک طرح پراکندگی با پلات های توزیع همراه (هیستوگرام) روی هر دو محور طرح، برای بررسی توزیع متغیرهایی که خود طرح پراکندگی را تشکیل می دهند.

اگرچه این کار بیشتر برای کتابخانه‌هایی مانند Seaborn که پشتیبانی داخلی از Joint Plots دارند، مناسب است، Matplotlib موتور اساسی است که Seaborn را قادر می‌سازد تا این طرح‌ها را بدون زحمت انجام دهد.

اگر به تجسم داده‌ها علاقه دارید و نمی‌دانید از کجا شروع کنید، حتماً ما را بررسی کنید بسته کتاب روی تجسم داده ها در پایتون:

تجسم داده ها در پایتون با Matplotlib و Pandas کتابی است که برای جذب مبتدیان مطلق به پانداها و Matplotlib با دانش پایه پایتون طراحی شده است و به آنها اجازه می دهد تا پایه ای قوی برای کار پیشرفته با این کتابخانه ها ایجاد کنند – از طرح های ساده گرفته تا طرح های سه بعدی متحرک با دکمه های تعاملی.

این به عنوان یک راهنمای عمیق عمل می کند که همه چیزهایی را که باید در مورد پانداها و Matplotlib بدانید، از جمله روش ساخت انواع طرح هایی که در خود کتابخانه تعبیه نشده اند را به شما آموزش می دهد.

تجسم داده ها در پایتون، کتابی برای توسعه دهندگان پایتون مبتدی تا متوسط، شما را از طریق دستکاری ساده داده ها با پانداها راهنمایی می کند، کتابخانه های ترسیم هسته ای مانند Matplotlib و Seaborn را پوشش می دهد و به شما نشان می دهد که چگونه از کتابخانه های اعلامی و تجربی مانند Altair استفاده کنید. به طور خاص، در طول ۱۱ فصل، این کتاب ۹ کتابخانه پایتون را پوشش می‌دهد: Pandas، Matplotlib، Seaborn، Bokeh، Altair، Plotly، GGPlot، GeoPandas و VisPy.

این به عنوان یک راهنمای عملی و منحصر به فرد برای تجسم داده ها، در مجموعه ای از ابزارهایی که ممکن است در حرفه خود استفاده کنید، عمل می کند.

(برچسب‌ها به ترجمه)# python



منتشر شده در 1403-01-11 12:38:03

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید