رسم نمودارهای قطبی با 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()


در مثال فوق یک لیست از اعداد در بازه 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()


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()


علاوه بر نمودار 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()


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


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


انتخاب بخشی از نمودار
برای انتخاب برشی از نمودار میتوانیم برای زاویه نمودار محدوده تعریف کنیم برای نمونه نمودار فوق را بصورت زیر برش بزنیم:
ax.set_thetamin(45)
ax.set_thetamax(135)


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