ایجاد نمودارهایی با دو محور y در متلب

حتما تا حالا نمودارهایی رو دیده اید که دارای دو محور y می باشند که هر محور y هم رنج داده های متفاوتی از محور دیگه داره. مثلا یه محور بازه بین 0 تا 1000 رو نشون میده که مثلا مربوط به متغیر ارتفاع هستش و یه محور دیگه بازه بین 0.1 تا 0.3 رو نشون می ده که مربوط به تغییرات چگالی هستش.

خب معلومه که چون بازه این دو محور خیلی خیلی با هم اختلاف دارند اگه هر دو تای ارتفاع و چگالی رو تو یه نمودار بکشیم مطمئنا تغییرات چگالی به طور واضح دیده نخواهد شد. برای این کار باید از نمودارهایی با دو محور استفاده کنیم. شاید یکی از مهمترین این نمودارها تو مهندسی نمودار فشار - دما  تو محاسبات حرارت و یا ترمودینامیک باشه.

برای فهم بیشتر ابتدا دستورات زیر رو توی command window اجرا کنید:

>>x = 0:0.01:20;

>>y1 = 200*exp(-0.05*x).*sin(x);

>>y2 = 0.8*exp(-0.5*x).*sin(10*x);

حالا می خواهیم هر دو نمودار y1 و y2 رو نسبت به x بکشیم. دستور زیر را اجرا کنید:

>>plot(x,y1,'b',x,y2,'g') همانطور که میبینید (شکل 1) از اونجا که بازه تغییرات y1 خیلی بزرگتر از y2 هستش اصلا تغییرات y2 در این شکل دیده نمیشه و برای مثال شما نمیتونید همچین شکلی رو توی پایان نامه یا مقاله قرار دهید. پس بهتر است که از یک نمودار با دو محور y استفاده کنیم که در یک محور نمودار y1 و در دیگری y2 را رسم کنیم. دستور نمودارهای دو محوره در متلب plotyy می باشد. دستور زیر را اجرا نمائید:

>> plotyy(x,y1,x,y2)

همانطور که دیده می شود (شکل 2) نموداری با دو محور y برای ما رسم می شود که در محور سمت چپ نمودار اولی یعنی y1 بر حسب x و در محور سمت راست نمودار دومی یعنی y2 بر حسب x رسم شده است. در این عکس می توان تغییرات y2 را به وضوح مشاهده نمود.

در رابطه به نمودار های دو محوره چندین بحث وجود دارد که باید به آنها اشاره کنیم:

1- چگونه یک محور و یا هر دو محور y و یا محور x را لگاریتمی کنیم؟

جواب: همانطور که می دانیم در نمودارهای دو بعدی نوع محورها می توانند خطی و یا لگاریتمی باشند. برای توضیحات بیشتر می توانید به «ایجاد نمودارهای دوبعدی با محورهای لگاریتمی در متلب» در همین وبلاگ مراجعه کنید.

در نمودارهای دو بعدی هم هر یک از محورها می توانند لگاریتمی و یا خطی باشند.

به جای دستور plotyy(x,y1,x,y2) که نوشتیم می توانستیم یکی از دستورات زیر را اجرا کنیم:

plotyy(x,y1,x,y2) = plotyy(x,y1,x,y2,'plot') = plotyy(x,y1,x,y2,@plot)

عبارت 'plot' در دستور دوم و یا @plot در دستور سوم به این معنی است که هر دو محور y دارای نوع خطی می باشند. چون هر دو محور y دارای نوع خطی می باشند نوشتن یک عبارت 'plot'  و یا @plot  برای هر دو به کار می رود. همانطور که دیدیم ننوشتن هیچ عبارتی هم به صورت default نوع محور را خطی می کند.

اما اگرکه مثلا بخواهیم محور y مربوط به نمودار y1 خطی و نمودار y2 لگاریتمی باشد باید به صورت زیر بنویسیم:

>> plotyy(x,y1,x,y2,'plot','semilogy')

واضح است که به جای عبارت 'semilogy' می توان @semilogy و به جای 'plot' می توان @plot را نوشت.

دیگر حالتها را می توان به صورت زیر نوشت:

الف- هر دو محور y لگاریتمی و محور x خطی :                                                               >>plotyy(x,y1,x,y2,'semilogy')

ب- هر دو محور y لگاریتمی و محور x لگاریتمی :                                                                 ‌>>plotyy(x,y1,x,y2,'loglog')

عبارت plotyy(x,y1,x,y2,'loglog','plot') دارای خطای منطقی می باشد علت آن هم این است که از آنجا که ما یک محور x داریم این محور نمی تواند در آن واحد هم خطی باشد و هم لگاریتمی که در این عبارت محور x برای y1 لگاریتمی و برای y2 خطی می باشد. پس باید حواسمان را جمع کنیم.!

2- رنگ نمودارها و محورها را چگونه تغییر دهیم و یا چگونه ضخامت خط را تغییر داده و یا marker بر نمودار بگذاریم و یا اینکه چگونه برچسب برای محورها قرار دهیم؟

برچسب گذاری برای محور x و محور y سمت چپ با همان دستورات xlabel و ylabel انجام می پذیرد:

>>xlabel('x')

>>ylabel('y_1')

می توان با دستور title هم یک عنوان به نمودار داد و یا با دستور legend می توان برای نمودار راهنما قرار داد:

>>title('Type of Graph - -> plotyy')

>>legend('y_1','y_2')

اما مشکل قرار دادن برچسب بر روی محور y سمت راست می باشد.

برای قرار دادن بر چسب بر روی محور y سمت راست نیاز است که دستورات set و get را توضیح دهیم که چون هنوز پست مربوط به این دستورات را برایتان قرار نداده ام مجبورم فقط خود دستورات را بنویسم. اگرکه در فهم آن مشکلی داشتید می توانید منتظر بمانید تا من در پست های آینده این دستورات مهم را توضیح دهم.

برای گذاشتن برچسب بر روی محور y سمت راست و یا تغییر دادن رنگ نمودارهای آبی و سبز و یا تغییر رنگ محورها باید ابتدا دستور plotyy را به شکل زیر بنویسیم:

>>[AX P1 P2]=plotyy(x,y1,x,y2);

با این کار سه متغیر به نامهای AX و P1 و P2 در workspace ساخته می شوند که متغیر AX یک بردار با دو مولفه می باشد. مولفه AX(1) نشان دهنده محور y سمت چپ و مولفه AX(2) نشان دهنده محور y سمت راست می باشد.

متغیر P1 نشان دهنده نمودار اولی یعنی y1 بر حسب x و متغیر P2 نشان دهنده نمودار دومی یعنی y2 بر حسب x می باشد. پس برای نمونه اگر که می خواهیم رنگ نمودار y1 بر حسب x که در اینجا آبی هست را تغییر دهیم باید خاصیت رنگ متغیر P1 را تغییر دهیم و یا اگر می خواهیم برای نمودار y2 بر حسب x از marker استفاده کنیم باید برای متغیر P2 از marker استفاده کنیم.

مثلا اگر قرار است رنگ محور سمت چپ را عوض کنیم باید در واقع رنگ AX(1) را عوض کنیم و یا مثلا اگر قرار است برای محور سمت راست برچسب بگذاریم باید خاصیت ylabel را برای AX(2) عوض کنیم.

اما تغییر خاصیت نمودارها مانند رنگ، ضخامت خط، مارکر و ...: با دستورات زیر می توان رنگ نمودارها را به دلخواه عوض کرد:

>>set(P1,'color','r')

>>set(P2,'color',[0.5 0 1])

با دستور اول رنگ نمودار y1 قرمز می شود. می توان به جای 'r' از دیگر حروف استفاده کرد. برای مطالعه بیشتر به بخش «نمودار های دو بعدی در متلب» همین وبلاگ مراجعه نمائید.

دستور دوم نوع دیگری از ترکیب رنگها می باشد. متلب با خاصیت RGB سروکار دارد. سه عددی که در دستور بعدی به کار رفته است به ترتیب عدد اول سهم رنگ قرمز (R) و عدد دوم سهم رنگ سبز (G) و عدد سوم سهم رنگ آبی (B) را نشان می دهد. که این اعداد باید بین صفر و یک باشند. مثلا اگر هر سه را یک قرار دهیم رنگ حاصله سفید و اگر هر سه را صفر قرار دهیم رنگ حاصله مشکی خواهد بود. برای مثال  به جای عبارت set(P1,'color','r') از عبارت set(P1,'color',[1 0 0]) نیز می توان استفاده کرد.

مثلا می خواهیم نوع خط نمودار y2 را به خط چین تغییر دهیم و یا نوع خط نمودار y1 را نقطه چین کنیم و مثلا ضخامت خط نمودار y1 را 3 قرار دهیم:

>>set(P2,'linestyle','--')

>>set(P1,'linestyle',':','Linewidth',2)

و یا اینکه برای نمودار y2 از marker دایره استفاده کنیم:

>>set(P2,'marker','o')

تغییر رنگ خود محورها:

همانطور که در شکل 2 مشاهده می کنید به صورت پیش فرض رنگ محور سمت چپ آبی و محور سمت راست سبز می باشد. اگر که بخواهید خاصیت رنگ این محورها را تغییر دهید همانطور که گفته شد باید خاصیت رنگ AX(1) برای محور سمت چپ و خاصیت رنگ AX(2) برای محور سمت راست را تغییر دهیم. هر محور خاصیتی به نام ycolor دارد که ما با دستور set می توانیم یک رنگی رو به اون set کنیم:

>>set(AX(1),'ycolor','k')

>>set(AX(2),'ycolor','m')

/ 1 نظر / 106 بازدید
ال مو یا

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