فهرست بستن

رسم نمودار دایره‌ای تو در تو در پایتون با استفاده از کتابخانه matplotlib

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

بسم الله الرحمن الرحیم

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

۱. دگره‌ک گؤستریسی:

پایتون یازیلیملاما دیلینده matplotlib واسطه‌سییله دگره‌ک گؤستریسینین رسمی اوچون pie تابعینی ایشلتمه‌لیییک. بو تابع چاغیریلیرکن بلیرتیلمه‌سی گرک اولان بیرجه گیریش، x، صنفلرین وئریلرده پایی دیر. بو تابعین باشقا اهمیتلی گیریشلری بئیله دیرلر: explode صنفلرین دگره‌گین اورتاسینا گؤره دیشاریلیغینی گؤسترن بیر لیست دیر. بو لیستده اولان ساییلارین تعدادی x اوچون وئریلن لیستده‌کی ساییلار تعدادی ایله بیر اولمالی دیر. labels: صنفلرین آدلارینی گؤسترن بیر یازی لیستی دیر. دگره‌ک گؤستریسینده صنفلر، بو یازی لیستی واسطه‌سییله آدلاناجاقلار. colors: صنفلرین بویلاقلارینی بلیرتن لیست دیر. autopct: صنفلرین پایینین گؤستریلمه‌سینی بلیرتن پارامتر دیر. بو پارامتر None اولورسا صنفلرین پایلاری گؤستریلمه‌یه‌جک دیر. یازی یوخسا تابع اولورسا، صنفلرین پایی گؤستریله‌جک دیر. بو گیریش اوچون وئریلن یازی، صنفلرین پایلارینین هانسی فرمتده یازیلماسینا احتوا ائتمه‌لی دیر. pctdistance: صنفلرین پایلارینی دگره‌ک گؤستریسی اوزرینده یازاجاق یازینین مرکزله اوزاقلیغینی بلیرتن گیریش دیر. shadow: گؤسترینین کؤلگه‌لی یوخسا گؤلگه‌سیز اولماسینی معین ائدن گیریش دیر. مقداری ایسه True یا False اولمالی دیر. startangle: رسمین هانسی زاویه‌دن باشلانیلاجاغینی بلیرتمک اوچون گیریش دیر.

میثاللار واسطه‌سییله بو تابعین ایشلنیشی داها آیدینلاشاجاق دیر. ایلک میثال، بیر بؤلگه‌نین الکتریسیته‌سینین تولیدینده فرقلی گوجلرین پایینی دگره‌ک گؤستریسی واسطه‌سییله آچیقلاماق مسئله‌سی دیر. بو بؤلگه‌نین ۴۰% الکتریسیته‌سی گونش ایشیغی ایله، ۲۵% گاز یاندیریلماسی ایله، ۲۰% یئل گوجو ایله و سون ۱۵% کؤمور یاندیریلماسی ایله الده ائدیلدیگی فرض اولونور.

import matplotlib.pyplot as plt

Colors = plt.cm.viridis

fig1, ax1 = plt.subplots()
patches, texts, autotexts = ax1.pie([40, 25, 20, 15], 
                                    explode=[0.1, 0.1, 0.1, 0.1], 
                                    labels=["Günəş", "Gas", "Yel", "Kömür"], 
                                    autopct="%1.1f%%", shadow=True, startangle=60, 
                                    colors=[Colors(0.4), Colors(0.5), Colors(0.6), Colors(0.7)])
for autotext in autotexts:
    autotext.set_color("white")

plt.show()

گؤردوگونوز کیمی pie تابعینین بیرینجی گیریشی قیرخ، ایگیرمی بئش، ایگیرمی و اون بئشه احتوا ائدن بیر سایی لیستی دیر. ایکینجی گیریش اولاراق explode معیّنلشمیش دیر. هر صنف اوچون گؤستری صفر تام اوندا بیر واحد دیشاری چیخاریلاجاق. labels گیریشی واسطه‌سییله صنفلرینی گؤستری اوزرینده یازیلاجاق آدلارینی بلیرتمیشیک. autopct اوچون یازیلان یازی، صنفلرین پایلارینین بیر اعشار رقمه‌جه گؤستریلمه‌سی معناسیندا دیر. کؤلگه‌نین اولماسی و باشلانیلاجاق زاویه‌نین آلتمیش درجه اولماسی دا بلیرتیلمیشلر. گؤستریده هر صنف اوچون ایشلنیله‌جک بویاق ایسه اؤنجه یاراتدیغیمیز Colors شیی واسطه‌سییله مقدارلانمیش دیر. Colors رسم کیتابخانامیزین viridis بویاق نقشه‌سی اوزریندن یارانمیش دیر. pie تابعینین نهایت اوچ چیخیشی وار دیر. بو چیخیشلارین جزئیاتدا نه اولدوغونا گؤره سؤز آچماق لازم دییل دیر. آنجاق بونو بیلمک گرک اتوماتیک شکلده گؤسترییه آرتیریلان یازیلارین خصوصیتلرینی دَییشدیرمک اوچون autotexts چیخیشینی ایشلده‌بیلرسینیز. بو یازیلیمدا سؤزو گئدن چیخیش، گؤستری اوزرینده یازیلان پایلارین بویاسینی آغا دَییشدیرمک اوچون ایشلنمیش دیر. نهایتده رسم ائتدیگیمیز دگره‌ک گؤستریسی بئیله اولاجاق دیر:

labelـلرین گؤستریده نئجه یئر آلدیقلارینی گؤرورسونوز لکن legend واسطه‌سییله ده صنفلری تانیتماق ممکن دیر. یوخاریدا گؤردوگونوز یازیلیمی legend ـدن یارارلانماق اوچون بئیله یازابیلریک:

import matplotlib.pyplot as plt

Colors = plt.cm.tab20c

fig1, ax1 = plt.subplots()
patches, texts, autotexts = ax1.pie([40, 25, 20, 15], 
                                    explode=[0.1, 0.1, 0.1, 0.1], 
                                    autopct="%1.1f%%", shadow=True, startangle=60, 
                                    colors=[Colors(0.02), Colors(0.22), Colors(0.42), Colors(0.62)])
for autotext in autotexts:
    autotext.set_color("white")

plt.legend(["Günəş", "Gas", "Yel", "Kömür"])

plt.show()

بو یازیلیمین نتیجه‌سینی آشاغیدا گؤره‌بیلرسینیز:

رسم ائتدیگیمیز دگره‌ک گؤستریسینده، بوتون بیر دگره‌ک، صنفلرین وئریلرده پایی اساسدا بؤلونموش دور، لکن بیز گؤسترینی ایکی مرکزداش دگره‌گه محدود اولان ناحیه‌لر واسطه‌سییله ده رسم ائده‌بیلریک. بو setp تابعییله ممکن اولور. بو تابعین نئجه ایشلنمه‌سی آشاغیداکی مثال ایله اؤگرنیله‌بیلر:

import matplotlib.pyplot as plt

Colors = plt.cm.Blues

fig, ax1 = plt.subplots()
patches, texts = ax1.pie([40., 25., 20., 15.], 
                         explode=[0.1, 0.1, 0.1, 0.1], 
                         startangle=60,  
                         colors=[Colors(0.2), Colors(0.4), Colors(0.6), Colors(0.8)])
plt.setp(patches, width=0.5, edgecolor="white")

plt.legend(["Günəş ۴۰%", 
            "Gas 25%", 
            "Yel 20%", 
            "Kömür 15%"])

plt.show()

setp تابعینین گیریشلریندن اولان width ایکی دگره‌ک آراسیندا اولان ناحیه‌نین انینی، edgecolor ایسه سینیرلارینین بویاسینی بلیرتیرلر. بو میثالین نتیجه‌سی آشاغیدا گؤستریلمیش دیر:

بورا چاتدیقدان سونرا، دئمک بیز ایچ ایچه دگره‌ک گؤستریلرین رسم ائتمه‌سی اوچون گرک اولانلاری اؤگرنمیشیک.

۲. ایچ ایچه دگره‌ک گؤستریسی:

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

import matplotlib.pyplot as plt
from numpy import arange, array

fig, ax = plt.subplots()

size = 0.3
radius = 1.2
vals = array([[60., 32.], 
              [۳۷٫, ۴۰٫], 
              [۲۹٫, ۱۵٫]])

cmap = plt.cm.tab20c
outer_colors = cmap(arange(3) * 4)
inner_colors = cmap([1, 2, 5, 6, 9, 10])

patches1, texts1 = ax.pie(vals.sum(axis=1), 
                          radius=radius, colors=outer_colors,
                          labels=["A sinfi", "B sinfi", "C sinfi"], 
                          wedgeprops=dict(width=size, edgecolor="white"))

patches2, texts2 = ax.pie(vals.flatten(), 
                          radius=radius-size, colors=inner_colors,
                          labels=["A1", "A2", 
                                  "B1", "B2", 
                                  "C1", "C2", ], 
                          labeldistance=radius - 1.5 * size, 
                          wedgeprops=dict(width=size, edgecolor="white"))

plt.legend()
handles, labels = ax.get_legend_handles_labels()

ax.legend(handles[3:], 
          ["A1", "A2", 
           "B1", "B2", 
           "C1", "C2", ], 
          loc=(1.1, 0.7))

plt.show()

اصل ایشیمیزه باشلامامیشدان، گرک اولان ماژوللاری، شی‌لری و تابعلری کیتابخانالاردان چاغیرمالیییق. بونا گؤره ده رسم اوچون matplotlib ـدن pyplot ماژولونو plt آدی ایله و بعضی عددی ایشلر اوچون numpy ـدان arange و array ـی چاغیرمیشیق. اوندان سونرا هر ایشدن اوّل pyplot ماژولوندان subplots تابعی واسطه‌سییله رسمیمیزه احتوا ائدن تصویر و محورلر یارادیلمیشلار. اوندان سونرا رسم ائده‌جگیمیز گؤستریده دگره‌ک ناحیه‌لرین انی، ایچ ایچه دگره‌ک گؤستریسینین شعاعی و صنفلر پایینی وئریلرده گؤرسَدن مقدارلار تعریفلنمیشلر. pyplot ماژولوندان cm، بویاق نقشه‌لرینه احتوا ائدر. گؤسترینی بویاماق اوچون cmـدن tab20c بویا نقشه‌سینی سئچیب، ایچریلیکده و دیشاریلیقدا اولان دگره‌کلرین بویاماسی اوچون بویاقلاری inner_colors و outer_colors لیستلرینده حاضرلاییریق. بونلاردان سونرا اساس ایشیمیز باشلاییر و دگره‌ک گؤستریلرینی رسم ائدیریک. ایلک اولاراق دیشاریلیقدا اولان دگره‌ک گؤستریسینی، سونرا ایسه ایچریلیکده اولانی رسم ائده‌جگیک. دیشاریلیقدا اولانی رسم ائتمک اوچون vals ـین هر سطرینده اولان مقدارلاری توپلاییب سونرا اوچ مقدارلی بیر لیست شکلینده pie تابعینه وئرمیشیک. شعاع یوخاریلیقدا تعریفله‌دیگیمیز radius واسطه‌سییله بلیرتیلمیش دیر. بویاقلار دا یئنه تعریفله‌دیگیمیز outer_colors ایله تعیین اولموشلار. صنفلرین آدلارینی ایسه بیر لیست اولاراق labels گیریشی اوچون وئرمیشیک. سون پارامتر ایسه wedgeprops دیر. pie تابعینین رسم ائتدیگی شکلین مشخصه‌لرینی بو گیریش ایله بلیرتمک ممکن دیر. wedgeprops اوچون دگره‌ک گؤستریسینین انینی و سینیرلارینین بویاسینی بیر dictionary اولاراق تعیین ائتمیشیک. wedgeprops پارامترینی مقدارلاماق ایله داها setp تابعینی ایشلتمک گرک دییل دیر. کُدلارین دوامیندا ایلک دگره‌ک آردیندان ایکینجینی ده رسم ائتمیشیک. البته آرادا نئچه کیچیک فرقلر وار دیر. ایکینجی دگره‌ک گؤستریسینده آلتی صنفیمیز وار، دئمک اؤنجه‌کی هر بیر صنفین ایکی آلت-صنفی ده وار دیر. ایچریلیکده اولان گؤستریده شعاع size ـجا کیچیلمه‌لی دیر. اؤنجه‌کی شعاع ایشلدیلسه ایکی دگره‌ک بیر-بیرینین اوزرینه دوشرلر، اونون اوچون ده دیشاریلیقدا اولان دگره‌گین انینی، اونا اختصاصلانمیش شعاعدان، چیخمالیییق. صنفلرین آدلاری دا آلتی عنصرلی یازی لیستی واسطه‌سییله بلیرتیلمه‌لی دیر. دگره‌ک گؤستریلری رسم ائدیلدیکدن سونرا legend لر آرتیریلمالی دیرلار. بیز بو رسمده یالنیز آلت-صنفلر اوچون legend ـین گؤرسَدیلمه‌سینی دیله‌دیگیمیز اوچون بوتون دوققوز صنف اوچون legend ـی فعال ائتدیکدن سونرا get_legend_handles_labels تابعی واسطه‌سییله handle ـلر و label ـلری آلیب، legend ـی یئنه‌دن اوچ اصل صنف اولمادان فعال ائدیریک. بو یازیلیمین رسم ائتدیگی گؤسترینی آشاغیدا گؤره‌بیلرسینیز:

دیدگاهتان را بنویسید

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