متلب
صفحات وبلاگ
نویسنده: پ متلب - سه‌شنبه ۱٥ فروردین ،۱۳٩۱

حتما تا حالا نمودارهایی رو دیده اید که دارای دو محور 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')

با دستور اول رنگ محور سمت چپ مشکی شده و با دستور دوم رنگ محور سمت راست بنفش می شود. می توانید از ترکیب رنگهای RGB هم استفاده نمائید مانند:

>>set(AX(1),'ycolor',[1 1 1])

با این دستور رنگ محور سمت چپ سفید می شود.

اگر که خواستید رنگ هر دو محور رو یک جا به هم عوض کنید می تونید از دستور زیر استفاده کنید:

>>set(AX,'ycolor','r')

با این دستور رنگ هر دو محور قرمز خواهد شد.

 

گذاشتن بر چسب برای محور y سمت راست:

همانطور که اشاره کردیم با دستور ylabel می توانیم برای محور سمت چپ برچسب بگذاریم اما برای محور سمت راست باید از دستور دیگری استفاده نمائیم. هر محوری خاصیتی به نام string دارد که در واقع برچسبی است که بر آن محور قرار میگیرد. پس به زبان ساده ما باید string محور سمت راست را تغییر دهیم. اما علاوه بر این مطلب باید بدانیم که این string مربوط می شه به خاصیت ylabel اون محور. به طور ساده اگه بخوام بگم باید بگیم ما می خواهیم خاصیت ylabel مربوط به محور AX(2) رو تغییر بدهیم، یعنی چی که تغییر بدهیم؟ یعنی اینکه خاصیت string اون رو به هر چیزی که ما می خواهیم تغییر دهیم. این مطالبی رو که گفتم به زبان متلب باید به صورت زیر بنویسیم:

>>set(get(AX(2),'ylabel'),'string','y_2')

به کمک دستور get(AX(2),'ylabel') به متلب می فهمونیم که چه چیزی رو تو حافظه بگیره و ما با این دستور می گیم که خاصیت ylabe از محور سمت راست رو بگیر. خوب متلب میگه گرفتم، حالا با دستور set میگیم string اون رو به y_2 تغییر بده. به جای y_2 هر چیزی که بنویسید به عنوان برچسب محور سمت راست قرار داده خواهد شد.

واضح است که به جای دستور ylabel('y_1') می توان از دستور زیر استفاده کرد:

>>set(get(AX(1),'ylabel'),'string','y_1')

که به نظر کار بیهوده ای می رسد چراکه دستور ylabel('y_1') خیلی کوتاه تر و فهم آن ساده تر می باشد!

اگر هم بخواهید رنگ محور x را تغییر دهید می توانید از دستور زیر استفاده کنید:

>>set(AX,'xcolor','g')

با این دستور رنگ محور x سبز می شود. با دستور زیر هم میتونید رنگ محور x بالا رو تغییر بدید:

>> set(gca,'xcolor','k')

با این دستور رنگ محور بالایی مشکی خواهد شد. (gca مخفف get current axis می باشد.)

شکل 3 شکل نهایی این دستورات خواهد بود.

شکل های 1 و2 و 3 و همچنین m فایل مربوط به این پست را در آدرس زیر به صورت یه فایل rar قرار داده ام که می تونید دانلود کنید. پسورد فایل rar هم هستش: www.elmoya.mihanblog.com

https://rapidshare.com/files/459251068/Plotyy_files.rar


نویسندگان وبلاگ:
کدهای اضافی کاربر :