استفاده از تابع subplots
برای ایجاد چند نمودار در یک صفحه
تابع subplots
در Matplotlib ابزاری قدرتمند برای ایجاد چند نمودار در یک صفحه است. این تابع به شما امکان می دهد تا نمودارهای مختلف را در یک چیدمان دلخواه در یک فیگور واحد ایجاد کنید.
در این راهنما، به بررسی نحوه استفاده از تابع subplots
برای ایجاد چند نمودار در یک صفحه می پردازیم:
۱. مثال ساده:
Python
import matplotlib.pyplot as plt
# ایجاد یک فیگور و دو نمودار فرعی
fig, (ax1, ax2) = plt.subplots(۱, ۲)
# رسم نمودار خطی در نمودار فرعی اول
x = [۱, ۲, ۳, ۴, ۵]
y = [۲, ۴, ۵, ۴, ۲]
ax1.plot(x, y)
ax1.set_title('نمودار خطی ۱')
ax1.set_xlabel('X')
ax1.set_ylabel('Y')
# رسم نمودار میله ای در نمودار فرعی دوم
data = [۵, ۶, ۷, ۸, ۶]
ax2.bar(x, data)
ax2.set_title('نمودار میله ای ۲')
ax2.set_xlabel('X')
ax2.set_ylabel('Y')
# تنظیم فاصله بین نمودارها
plt.subplots_adjust(left=۰.۱۵, right=۰.۸۵, top=۰.۸۵, bottom=۰.۱۵)
# نمایش نمودارها
plt.show()
توضیح:
fig, (ax1, ax2)
:fig
: متغیری برای ذخیره فیگور ایجاد شده.(ax1, ax2)
: متغیرهایی برای ذخیره نمودارهای فرعی.
plt.subplots(1, 2)
: ایجاد دو نمودار فرعی در یک ردیف و دو ستون.ax1.plot(x, y)
: رسم نمودار خطی در نمودار فرعی اول.ax2.bar(x, data)
: رسم نمودار میله ای در نمودار فرعی دوم.plt.subplots_adjust()
: تنظیم فاصله بین نمودارها و حاشیه های فیگور.plt.show()
: نمایش فیگور.
۲. ایجاد چند نمودار فرعی در یک شبکه:
Python
import matplotlib.pyplot as plt
# ایجاد یک فیگور و ۴ نمودار فرعی
fig, axes = plt.subplots(۲, ۲)
# رسم نمودارهای مختلف در هر نمودار فرعی
axes[۰, ۰].plot([۱, ۲, ۳, ۴, ۵], [۲, ۴, ۵, ۴, ۲])
axes[۰, ۱].bar([۱, ۲, ۳, ۴, ۵], [۵, ۶, ۷, ۸, ۶])
axes[۱, ۰].scatter([۱, ۲, ۳, ۴, ۵], [۳, ۵, ۷, ۲, ۱])
axes[۱, ۱].pie([۴۰, ۳۰, ۲۰, ۱۰], labels=['A', 'B', 'C', 'D'])
# تنظیم عناوین و برچسب ها برای هر نمودار فرعی
for ax in axes.flat:
ax.set_title(f'نمودار {ax.get_loc()[۰] + ۱}')
ax.set_xlabel('X')
ax.set_ylabel('Y')
# تنظیم فاصله بین نمودارها
plt.subplots_adjust(left=۰.۱, right=۰.۹, top=۰.۹, bottom=۰.۱)
# نمایش نمودارها
plt.show()
توضیح:
fig, axes = plt.subplots(2, 2)
: ایجاد ۴ نمودار فرعی در دو ردیف و دو ستون.axes[0, 0].plot()
: رسم نمودار در اولین نمودار فرعی (ردیف ۰، ستون ۰).axes[1, 1].pie()
: رسم نمودار دایره ای در آخرین نمودار فرعی (ردیف ۱، ستون ۱).
۳. تنظیم ویژگی های نمودارها به طور جداگانه:
Python
import matplotlib.pyplot as plt
# ایجاد یک فیگور و دو نمودار فرعی
fig, (ax1, ax2) = plt.subplots(۱, ۲)
# رسم نمودار خطی در نمودار فرعی اول
x = [۱, ۲, ۳, ۴, ۵]
y = [۲, ۴, ۵, ۴, ۲]
ax1.plot(x, y, label='خط', color='red')
ax1.set_title('نمودار خطی')
ax1.set_xlabel('X')
ax1.set_ylabel('Y')
ax1.legend() # نمایش افسانه
# رسم نمودار میله ای در نمودار فرعی دوم
data = [۵, ۶, ۷, ۸, ۶]
ax2.bar(x, data, width=۰.۴, bottom=۰)
ax2.set_title('نمودار میله ای')
ax2.set_xlabel('X')
ax2.set_ylabel('Y')
ax2.set_xticks(x) # تنظیم موقعیت برچسب های محور X
ax2.set_xticklabels(['۱', '۲', '۳', '۴', '۵']) # تنظیم نام های برچسب های محور X
# تنظیم فاصله بین نمودارها
plt.subplots_adjust(left=۰.۱۵, right=۰.۸۵, top=۰.۸۵, bottom=۰.۱۵)
# نمایش نمودارها
plt.show()
توضیح:
ax1.plot(x, y, label='خط', color='red')
:label='خط'
: تنظیم نام برای خط در افسانه.color='red'
: تنظیم رنگ خط به قرمز.
ax2.bar(x, data, width=0.4, bottom=0)
:width=0.4
: تنظیم عرض میله ها.bottom=0
: تنظیم نقطه شروع میله ها از محور X.
ax2.set_xticks(x)
: تنظیم موقعیت برچسب های محور X بر اساس مقادیرx
.ax2.set_xticklabels(['1', '2', '3', '4', '5'])
: تنظیم نام های برچسب های محور X به صورت دستی.
۴. اشتراک گذاری محورهای X یا Y:
Python
import matplotlib.pyplot as plt
# ایجاد یک فیگور و دو نمودار فرعی
fig, (ax1, ax2) = plt.subplots(۱, ۲, sharex=True)
# رسم نمودار خطی در نمودار فرعی اول
x = [۱, ۲, ۳, ۴, ۵]
y1 = [۲, ۴, ۵, ۴, ۲]
ax1.plot(x, y1, label='خط ۱', color='red')
ax1.set_ylabel('Y1')
# رسم نمودار میله ای در نمودار فرعی دوم
y2 = [۵, ۶, ۷, ۸, ۶]
ax2.bar(x, y2, width=۰.۴, bottom=۰, label='میله', color='blue')
ax2.set_ylabel('Y2')
# اشتراک گذاری محور X
ax2.set_xlabel('X')
# نمایش افسانه ها در هر نمودار فرعی
ax1.legend()
ax2.legend()
# تنظیم فاصله بین نمودارها
plt.subplots_adjust(left=۰.۱۵, right=۰.۸۵, top=۰.۸۵, bottom=۰.۱۵)
# نمایش نمودارها
plt.show()
توضیح:
fig, (ax1, ax2) = plt.subplots(1, 2, sharex=True)
: اشتراک گذاری محور X بین دو نمودار فرعی.ax1.set_ylabel('Y1')
: تنظیم نام محور Y برای نمودار فرعی اول.ax2.set_ylabel('Y2')
: تنظیم نام محور Y برای نمودار فرعی دوم.ax1.legend()
: نمایش افسانه فقط در نمودار فرعی اول.ax2.legend()
: نمایش افسانه فقط در نمودار فرعی دوم.
۵. ایجاد نمودارهای تو در تو:
Python
import matplotlib.pyplot as plt
# ایجاد یک فیگور و دو نمودار فرعی
fig, ax = plt.subplots()
# رسم نمودار خطی
x = [۱, ۲, ۳, ۴, ۵]
y1 = [۲, ۴, ۵, ۴, ۲]
ax.plot(x, y1, label='خط', color='red')
ax.set_xlabel('X')
ax.set_ylabel('Y1')
# رسم نمودار میله ای در همان نمودار فرعی
y2 = [۵, ۶, ۷, ۸, ۶]
ax2 = ax.twinx() # ایجاد یک محور X مشترک
ax2.bar(x, y2, width=۰.۴, bottom=۰, label='میله', color='blue')
ax2.set_ylabel('Y2', color='blue') # تنظیم رنگ برچسب محور Y2
# نمایش افسانه ها
lines1, labels1 = ax.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels()
ax.legend(lines1 + lines2, labels1 + labels2, loc='upper left')
# تنظیم فاصله بین نمودارها
plt.subplots_adjust(left=۰.۲, right=۰.۸, top=۰.۸, bottom=۰.۲)
# نمایش نمودارها
plt.show()
توضیح:
fig, ax = plt.subplots()
: ایجاد یک فیگور و یک نمودار فرعی.ax2 = ax.twinx()
: ایجاد یک محور X مشترک برای نمودار میله ای.ax2.set_ylabel('Y2', color='blue')
: تنظیم رنگ برچسب محور Y2.lines1, labels1 = ax.get_legend_handles_labels()
: دریافت خط ها و برچسب های افسانه از نمودار خطی.lines2, labels2 = ax2.get_legend_handles_labels()
: دریافت خط ها و برچسب های افسانه از نمودار میله ای.ax.legend(lines1 + lines2, labels1 + labels2, loc='upper left')
: نمایش افسانه ها برای هر دو نمودار در گوشه سمت چپ بالا.
نکات کلیدی:
- از تابع
subplots
برای ایجاد چیدمان دلخواه برای نمودارهای خود استفاده کنید. - می توانید ویژگی های هر نمودار فرعی را به طور جداگانه تنظیم کنید.
- اشتراک گذاری محورهای X یا Y می تواند برای مقایسه داده ها در دو نمودار مفید باشد.
- ایجاد نمودارهای تو در تو می تواند برای نمایش دو مجموعه داده مرتبط در یک نمودار مفید باشد.
- برای اطلاعات بیشتر در مورد تابع
subplots
، به مستندات Matplotlib مراجعه کنید.
مثال:
فرض کنید می خواهید دمای هوا و میزان بارش را در طول یک هفته در یک نمودار نشان دهید. می توانید از این روش برای ایجاد نموداری با محور X مشترک برای تاریخ ها و دو محور Y برای دما و میزان بارش استفاده کنید.
با استفاده از تابع subplots
می توانید نمودارهای پیچیده و جذاب با چیدمان های مختلف ایجاد کنید.