رسم نمودارهای قطبی با polar در matplotlib پایتون

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

در این مقاله با نحوه ترسیم نمودارهای قطبی (Polar) و نکات مربوط به آن آشنا خواهید شد. قبل از شروع مطالعه این مقاله لازم است با مفاهیم اصلی در کتابخانه Matplotlib آشنا باشید. در صورتیکه با این کتابخانه آشنایی ندارید توصیه می‌شود ابتدا مقاله زیر را مطالعه کنید:


مختصات قطبی

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

نمایش نقاط در دستگاه مختصات قطبی
نمایش نقاط در دستگاه مختصات قطبی
نمایش نقاط در دستگاه مختصات قطبی

با توجه مثلثات هر نقطه در مختصات دکارتی را می‌توان به مختصات قطبی تبدیل نمود:

x = r × cos(θ)
y = r × sin(θ)

r = sqrt(x² + y²)
θ = arctan(y/x)

برای رسم نمودار قطبی در کتابخانه Matplotlib از تابع polar استفاده می‌شود. برای نمونه برای ترسیم یک دایره یعنی مجموعه نقاطی که از مبدا مختصات به یک فاصله هستند بصورت زیر عمل می‌کنیم:

rads = np.arange(0, (2 * np.pi), 0.01) 

for rad in rads: 
    plt.polar(rad, 2, 'g.') 
    
plt.show() 
Image for post
Image for post

در مثال فوق یک لیست از اعداد در بازه 0 تا 2π برای زاویه انتخاب شده است و برای هر θ، شعاع ثابت 2 در نظر گرفته شده است.

پیچ ارشمیدس: مجموعه نقاطی هستند که در مختصات قطبی از فرمول زیر پیروی می‌کنند و بطور پیوسته از مبدا مختصات فاصله می‌گیرند:

r = θ

rads = np.arange(0, 2 * np.pi, 0.01)  
  
for rad in rads: 
    r = rad 
    plt.polar(rad, r, 'r.') 
      
plt.show()
Image for post
Image for post

Rhodonea یا رز چندپر: یک منحنی که در مختصات قطبی از فرمول زیر پیروی می‌کند. در اینجا a طول گلبرگ و n تعداد گلبرگ می‌باشد:

(r = a cos (n θ

a = 1
n = 6
  
rads = np.arange(0, 2 * np.pi, 0.01)  
  
for rad in rads: 
    r = a * np.cos(n*rad) 
    plt.polar(rad, r, 'b.') 
   
plt.show() 
Image for post
Image for post

علاوه بر نمودار polar برای ترسیم نمودارها در مختصات قطبی این امکان وجود دارد که ساختارهای دیگر را در این شکل گرافیکی نمایش داده داشته باشیم برای نمونه برای ترسیم داده‌های آماری در این نوع دستگاه مختصاتی می‌توانید به صورت زیر عمل کنید:

employee = ["January", "February", "March", "April",
            "May", "June", "July", "August",
            "September", "October", "November", "December"]

actual = [45, 53, 32, 61, 57, 45, 54, 40, 45, 20, 36, 45]
expected = [50, 55, 40, 65, 68, 50, 65, 55, 50, 24, 55, 50]

plt.figure(figsize=(10, 6))
ax = plt.subplot(polar=True)
 
theta = np.linspace(0, 2 * np.pi, len(actual))
 
# Arrange the grid into number of sales equal parts in degrees
plt.thetagrids(range(0, 360, int(360/len(employee))), employee)
 
# Plot actual sales graph
plt.plot(theta, actual)
plt.fill(theta, actual, 'b', alpha=0.1)
 
# Plot expected sales graph
plt.plot(theta, expected)
 
plt.legend(labels=('Actual', 'Expected'))
plt.title("Actual vs Expected sales")
 
plt.show()
Image for post
Image for post

 

تابع thetagrids برای تنظیم نمایش نام زوایا در نمودار polar مورد استفاده واقع می‌شود. به اینصورت که اولین پارامتر لیست موقعیت زوایا و پارامتر بعدی نام هر موقعیت است.

تغییر مبدا مختصات

برای تغییر مبدا مختصات در مختصات قطبی می‌توان از تابع set_rorigin استفاده می‌کنیم. برای مثال با مقدار ax.set_rorigin(-25) نمودار فوق بصورت زیر درمی‌آید:

Image for post
Image for post

تغییر زاویه با محور مختصات افقی

برای تغییر زاویه با محور مختصات افقی یا نقطه شروع θ در مختصات قطبی نیز می‌توان از تابع set_theta_zero_location استفاده کنیم. موقعیت‌های ممکن "N" ،"NW" ،"W" ،"SW" ،"S" ،"SE" ،"E"، یا "NE" می‌باشند. همچنین می‌توان با offset در این تابع بصورت دستی موقعیت را جابجا کرد. اجازه دهید نمودار فوق را با مقدار ax.set_theta_zero_location('W', offset=10)  مجددا خروجی بگیریم:

Image for post
Image for post

انتخاب بخشی از نمودار

برای انتخاب برشی از نمودار می‌توانیم برای زاویه نمودار محدوده تعریف کنیم برای نمونه نمودار فوق را بصورت زیر برش بزنیم:

ax.set_thetamin(45)
ax.set_thetamax(135)
Image for post
Image for post

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