رسم نمودار در متلب- بخش دوم : انواع نمودار دو بعدی در متلب
قابلیت رسم نمودار جزو پایهایترین امکانات نرمافزار متلب است که به کمک آن میتوان نتایج را در شکلهای گوناگون به تصویر کشید. ما در گام98، طی سری مقالات « طریقه رسم نمودار در متلب » به آموزش این بخش مهم پرداختیم. در بخش اول ترسیم نمودار در متلب صفر تا 100 ترسیم نمودار دو بعدی در متلب با دستور plot را بررسی کردیم. اکنون در این بخش دوم ترسیم نمودار در متلب میخواهیم انواع دستورات رسم نمودار دو بعدی در متلب را بیان کنیم.
قبل از مطالعه این بخش توصیه ما این است که حتما بخش اول ترسیم نمودار در متلب را که انواع زیردستورات ترسیم نمودار در متلب در آن بیان شده است را مطالعه نمایید چون در این بخش از آن زیردستورات استفاده خواهیم کرد.
نکات اولیه :1- در بخش اول با جزئیات کامل دستور plot آشنا شدیم اما در این بخش علاوه بر جزئیات قبلی با جزئیات بیشتری برای هر دستور آشنا خواهیم شد که لازم است با دقت نکات مربوط به آنها را مطالعه کنید.
2- دستور linspace که در کدهای این مقاله به وفور مشاهده میشود برای تولید m*n عدد با فواصل مساوی در بازه [a b] میباشد به صورت زیر میباشد:
linspace(a,b,n,m)
که در رابطه بالا تعداد اعداد مشخص نشود به طور پیشفرض 100 عدد تولید میشود.
آشنایی با نرمافزار متلب و برنامهنویسی در آن، جزو مهمترین مهارتهای دانشجویان مهندسی است. اگر میخواهید بصورت پایهای با طریقه برنامهنویسی در متلب آشنا شوید از طریق لینک « آموزش برنامه نویسی متلب » به صفحه آموزش متلب گام98 مراجعه نمایید.
رسم نمودار لگاریتمی در متلب – دستور semilogy، semilogx، loglog در متلب
در بسیاری از موارد نیاز داریم تا بتوانیم یکی از محورهای نمودار یا هر دو را بصورت لگاریتمی ترسیم کنیم.
به عنوان مثال در درس مکانیک خاک رشته مهندسی عمران برای رسم نمودار دو بعدی تخلخل برحسب بار برای یک نمونه اشباع خاک که معمولا در حالت معمول بصورت منحنی است برای اینکه تغییرات را بصورت خطی ببینیم محور بار را لگاریتمی در نظر خواهیم گرفت.
برای رسم نمودار لگاریتمی در متلب برای هر دو محور، فقط محور x و یا فقط محور y به ترتیب از دستورات loglog ، semilogx و semilogy استفاده میکنیم.
برای رسم نمودار لگاریتمی در متلب به عنوان یک مثال برای هر 3 دستور توابع زیر را در یک شکل ترسیم میکنیم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
x1=0:1000; x2=0:0.05:10; x3=-2:0.01:2; subplot(2,2,1) y1=log(x1); semilogx(x1,y1,'g:o','MarkerIndices',1:10:length(y1)) xlabel('x_1') ylabel('ln(x_1)') subplot(2,2,3) y2=exp(x2); semilogy(x2,y2,'s','linewidth',3,... 'color',[0.4 0.2 0.65],... 'MarkerIndices',1:10:length(y2)) xlabel('x_2') ylabel('e^(x_2)') subplot(2,2,[2 4]) y3=exp(x3); loglog(x3,y3,'c','Marker','diamond',... 'MarkerIndices',1:5:length(y3)); xlabel('x_3') ylabel('e^(x_3)') |
توضیحات : در رسم نمودار لگاریتمی در متلب برای استفاده از دستورهای مکمل و زیردستورات کمکی همان تنظیمات دستور plot را باید فرابگیریم که در بخش اول رسم نمودار در متلب به طور کامل به آن پرداختهایم و نکته جدیدی وجود ندارد.
رسم نمودار میله ای در متلب – دستور bar و barh در متلب
برای ترسیم نمودار میله ای در متلب بصورت عمودی و افقی به ترتیب از دستورات bar و barh استفاده میشود.
به طور معمول در ورودی اول مقدارهای محور افقی و در ورودی دوم مقدارهای متناظر با محور قائم را قرار میدهیم. اگر بصورت تک ورودی فراخوانی شود همانند دستور plot محور افقی را از یک تا تعداد المانهای همان ورودی ترسیم خواهد کرد.
تنظیمات رسم نمودار میله ای در متلب
1-برای عوض کردن رنگ داخل و لبه میلهها از زیردستور ‘FaceColor’ و ‘EdgeColor’ استفاده میشود. همچنین برای تعیین میزان پهنای رنگ لبه میلهها از زیردستور LineWidth استفاده میشود.
2-برای تغییر اندازه میلهها کافی است مقدار موردنظر را در ورودی سوم وارد کنیم که این مقدار بصورت پیش فرض عدد 0.8 میباشد.
3-اگر در فراخوانی دستور bar اسمی برای آن در نظر بگیریم میتوانیم کل محتویات را داشته باشیم و تنظیمات دقیقتری را داشته باشیم.
4-برای تعریف دسته بصورت کیفی باید آنها بصورت یک فایل categorical تعریف شوند.
به عنوان مثال اول رسم نمودار میله ای در متلب میخواهیم قیمت چند میوه را برای هر واحد کیلوگرم آنها بصورت نمودار میلهای ترسیم کنیم و قیمت بیشترین میوه را با رنگی متفاوت مشخص کنیم:
1 2 3 4 5 6 7 8 9 10 |
c = categorical({'apple','banana','pears',... 'oranges','Strawberry','Cucumber','Peach',... 'Kiwi','Pomegranate','Grapes'}); Prices=[6000 14000 13000 4000 17000 5000 8000 6000 10000 8000 ]; b=bar(c,Prices,0.7,'FaceColor',[0 .5 .5],... 'EdgeColor',[0 .9 .9],'lineWidth',1.2); b.FaceColor='flat'; b.CData(6,:) = [0.9 0.3 0.5]; xlabel('Fruits') ylabel('Price') |
در کد بالا برای دستور bar یک نام مشخص کردهایم و همانطور که ملاحظه میکنید از خاصیت دادههای struct برای تغییر رنگ یک میله استفاده کردهایم.
ابتدا b.FaceColor بصورت flat تعریف شده و در CData که رنگ داخل هر میله در هر سطر در آن بصورت RGB ذخیره شده است. میله مدنظر ما میله ششم است و کد RGB آن را تغییر دادهایم.
5-برای رسم چند میله در کنار هم دادهها بصورت یک ماتریس تعریف میشوند.
همچنین میتوانیم رنگ میلههای اول تا سوم هر دسته را نیز بصورت زیر و یا هر مشخصات دیگری را تغییر دهیم.
1 2 3 4 5 |
y = [1 3 5; 3 2 7; 3 4 2]; b = bar(y,'FaceColor','flat'); b(3).FaceColor=[0.2 0.1 1]; b(3).LineWidth = 1.3; b(3).EdgeColor =[0.1 0.9 0.2]; |
در مثال فوق رنگ میلههای سوم را به عنوان نمونه را تغییر دادهایم.
رسم چند نمودار میله ای بر روی هم
برای رسم نمودار میله ای در متلب علاوه بر حالت پیش فرض نمایش (‘grouped’) میتوانیم میلهها را برروی هم رسم کنیم (stacked’) و یا بصورت هیستوگرامی نمایش دهیم.( ‘histc’, ‘hist’)
برای همان مثال قبل نمودارها را بر روی هم رسم میکنیم.
1 2 |
y =[1 3 5; 3 2 7; 3 4 2]; bar(y,'stacked') |
همچنین دستور barh برای ترسیم نمودار دوبعدی در متلب بصورت میلهای افقی مورد استفاده قرار میگیرد. در زیر یک مثال کامل از انواع حالتهای مختلف این نمودار را میبینیم که اینها همان حالتهای گفته شده برای نمودار میلهای قائم میباشد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
x = [1,2]; y = [10,20,30,40 ; 50,60,70,80]; figure; subplot(2,2,1); barh(x,y,'grouped'); % groups by row title('Grouped Style') subplot(2,2,2); barh(x,y,'stacked'); % stacks values in each row together title('Stacked Style') subplot(2,2,3); barh(x,y,'hist'); % centers bars over x values title('hist Style') subplot(2,2,4); barh(x,y,'histc'); % spans bars over x values title('histc Style') |
رسم نمودار دایره ای در متلب – دستور pie در متلب
برای رسم نمودار دایره ای در متلب در حالت دو بعدی از دستور pie استفاده میشود. به عنوان مثال میخواهیم همهی هزینهها ، مالیات و سود یک شرکت را در دو سال 2018 و 2019 در نمودار دایرهای در متلب نمایش دهیم و میخواهیم که مقدار سود را از نمودار بصورت جداشده مشاهده کنیم:
1 2 3 4 5 6 7 8 9 10 |
X = [0.2 0.5 0.3]; labels = {'Taxes','Expenses','Profit'}; explod=[0 0 1]; ax1 = subplot(1,2,1); pie(ax1,X,explod,labels) title(ax1,'2018'); Y = [0.24 0.43 0.33]; ax2 = subplot(1,2,2); pie(ax2,Y,explod,labels) title(ax2,'2019'); |
برای رسم نمودار دایره ای در متلب همانطور که مشاهده میکنید برای جدا کردن قسمتی از نمودار از explode استفاده کردهایم و برای سایر هزینهها عدد صفر و برای سود عدد یک نوشته شده است.
با این flag قسمت سود را از نمودار بیرون آورده ایم. البته اسم آن اهمیتی ندارد و مهم این است که این flag تعریف شود.
لازم به ذکر است که واحدهای هزینهها برحسب درصد نوشته شدهاند.
برای رسم نمودار دایره ای در متلب برای دادههای کیفی میتوانیم مانند رسم نمودار میله ای در متلب دادهها را بصورت دادهی categorical تعریف بکنیم.
به عنوان مثال برای رسم نمودار دایره ای در متلب میزان بارش در 12 ماه برای یک شهر را میخواهیم بصورت کیفی در برای هر ماه بیان کنیم و نتیجه کلی را بصورت یک نمودار دایرهای نمایش داده و درصد بارش خیلی کم را بصورت جداشده رسم کنیم.
1 2 3 4 5 |
X = categorical({'Moderate','Low','Low','Very Low'... ,'Low','Moderate','Moderate','High',... 'High','Very High','Moderate','Low'}); explode={'Very Low'}; pie(X,explode) |
رسم نمودار هیستوگرام (Histogram) – دستور histogram در متلب
در ادامه رسم نمودار دو بعدی در متلب برای مشخص کردن فراوانی هر دستهای از دادهها از نمودار هیستوگرام فراوانی استفاده میکنیم.
برای رسم نمودار دو بعدی در متلب بصورت هیستوگرام در نسخههای قبلی از دستور hist و در نسخههای جدید این کار با دستور histogram استفاده میکنیم.
به عنوان مثال میخواهیم برای 1000 عدد با توزیع نرمال استاندارد و 20 تقسیمبندی نمودار هیستوگرام را ترسیم کنیم.
1 2 3 4 5 |
X=randn(1,1000); h=histogram(X,20); h.FaceColor=[0.8 0.5 0.1]; h.EdgeColor=[0.3 0.5 0.3]; h.LineWidth=1.5; |
ملاحظه میکنید که این دستور یکی از حالتهای خاص دستور bar میباشد.
بنابراین مانند آنچه که برای دستور نمودار میلهای در متلب گفته شد؛ تنظیماتی از جمله رنگهای نمودار را میتوانیم بصورت آنچه در کد بالا مشاهده میکنید، تغییر دهیم.
لازم به ذکر است که برای اینکه بخواهیم اعدادی با توزیع استاندارد نرمال تولید کنیم از دستور randn استفاده کردهایم.
اگر میخواهید توضیحات کاملی درباره این دستور و به طور کلی اعداد تصادفی در متلب را فرا بگیرید حتما مقاله « تولید عدد تصادفی در متلب » را مطالعه کنید.
رسم نمودار قطبی در متلب – دستور polarplot در متلب
برای رسم نمودار در متلب بصورت دو بعدی در مختصات قطبی در نسخههای قدیم متلب از دستور polar استفاده میشد که این دستور با دستور polarplot جایگزین شده است.
در ورودی اول مقدار θ و در ورودی دوم مقدار ρ را به دستور polarplot خواهیم داد.
به عنوان مثال برای دو تابع (ρ1=sin(3θ و (ρ2=cos(3θ نمودار قطبی در متلب را رسم خواهیم کرد.
1 2 3 4 5 6 7 8 9 |
theta = linspace(0,6*pi,200); rho1 = sin(3*theta); polarplot(theta,rho1,'cd','Linewidth',2) rho2 = cos(3*theta); hold on polarplot(theta,rho2,'mo','Linewidth',2) rlim([0 1]) legend('sin(3theta)','cos(3theta)') hold off |
لازم به ذکر است که برای تعیین محدوده ρ از دستور rlim استفاده میکنیم.
همچنین برای تعیین محدوده θ نیز میتوانیم از دستور thetalim استفاده کنیم.
به طور پیش فرض مقدار 0 تا 360 درجه برای θ در نظر گرفته میشود.
دستور hold off به طور کلی وقتی نموداری در ادامه نداریم ضرورتی ندارد و اگر بخواهیم خیلی استاندارد عمل کنیم از آن استفاده میکنیم!
همانطور که می دانید در اکثر پروژهای متلب، به دستورات مختلف رسم نمودار نیاز میشود. به شما پیشنهاد میشود برای مشاهده مثالهایی از رسم نمودار و پروژههای مختلفِ متلب، به صفحه « پروژههای آماده متلب » رجوع کنید.
رسم نمودار پراکندگی در متلب – دستور scatter در متلب
در ادامه رسم نمودار در متلب بصورت دو بعدی میخواهیم رسم نمودارهای پراکندگی را معرفی کنیم که بسیار پرکاربرد میباشد.
در بسیاری از مدلها که کارشان پیشبینی یک متغیر تصادفی است مانند مدلهای رگرسیون خطی بسیار نیاز داریم که جواب مشاهده شده را با پیشبینی مدل مقایسه کنیم.
برای مقایسه دو متغیر تصادفی از دستور scatter استفاده میکنیم.
اکثر زیردستورات plot برای دستور scatter و همچنین polarplot نیز کاربرد داشته که در مقاله اول رسم نمودار در متلب به آن پرداخته شد.
در یک مثال چندین نوع از این نمودار را برای شما ترسیم خواهیم کرد:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
x = linspace(0,3*pi,200); y = cos(x) + rand(1,200); ax1 = subplot(2,2,1); c = linspace(1,10,length(x)); scatter(ax1,x,y,[ ],c) sz=linspace(1,100,200); ax2 = subplot(2,2,3); scatter(ax2,x,y,sz,'filled','d',... 'MarkerFaceColor',[0.5 0.7 0.2],... 'MarkerEdgeColor',[0.1 0.2 0.8]) ax3=subplot(2,2,[2 4]); theta = linspace(0,1,500); x = exp(theta).*sin(100*theta); y = exp(theta).*cos(100*theta); s = scatter(x,y); s.LineWidth = 0.8; s.MarkerEdgeColor = 'm'; s.MarkerFaceColor = [0.5 0.5 0.5]; |
توضیحات : 1- در نمودار اول [ ] تعریف شده که به معنای خالی بودن داخل Markers میباشد. دستورscatter در حالت پیشفرض دارای Marker دایره میباشد
بردار c بعد از آن یک برداری است که به تعداد المانهای متغیرهاست و به تعداد آنها رنگهای متفاوت تولید میکند و اینکه در چه بازهای باشد اهمیت ندارد.
2-در نمودار دوم از زیردستور ‘filled’ استفاده شده است که داخل Markers را پر میکند.
همچنین برای تغییر رنگ Markers از زیردستورات مربوط به آن استفاده شده است که در مقاله رسم نمودار در ملتب شماره یک به طور کامل به این زیر دستورات پرداختهایم.
3-در نمودار سوم از خاصیت دادههای استراکچر برای تنظیم رنگ مارکرها استفاده شده است که فرقی با روشی قبلی ندارد.
در این روش باید حتما یک اسم برای نمودار انتخاب شود.
مزیت این شیوه آن است که میشود انواع تنظیمات مختلف برای یک نمودار انجام داد و در واقع کنترل بسیار زیادی را در اختیار کاربر قرار میدهد.
این مقاله با انواع دیگر رسم نمودارهای دوبعدی در متلب ادامه خواهد داشت . لطفا اگر نموداری را میخواهید ترسیم نمایید که در لیست بالا نیست حتما برای ما کامنت نمایید تا توضیح داده شود.
این مقاله آموزشی به کوشش تیم تولید محتوای علمی و نرمافزاری گام98 در راستای ارتقای دانش شما در استفاده از نرمافزار متلب تولید شده است. درصورتی مفید بودن این مقاله آن را به دوستان و آشنایان خود معرفی نمایید.
مطالب زیر را حتما مطالعه کنید
کار با بردارها در متلب
آموزش کامل انواع دستورات توزیعهای آماری در متلب
در این مقاله قصد داریم انواع دستورات مهم توزیع های آماری در متلب را به همراه رسم انواع توزیعها و برازش با استفاده از توزیع های آماری بیان نماییم.
آموزش صفر تا 100 تحلیل المان میله به روش اجزا محدود
در ادامه دومین سری از آموزشهای روش المان محدود در این مقاله تحلیل المان میله به روش اجزا محدود را همراه با مثال به طور صفر تا صدی آموزش خواهیم داد.
آموزش جامع و کامل تحلیل المان فنر به روش اجزا محدود
در اولین مجموعه از مقالات آموزشی روش اجزا محدود، آموزش جامع و کامل تحلیل المان فنر به روش المان محدود را همراه با مثال برای شما عزیزان بیان خواهیم کرد.
روش اجزا محدود – Finite Element Method
روش اجزا محدود یک روش عددی برای حل مسائل مهندسی و فیزیکی میباشد. در این مقاله به طورکلی با کاربرد، تاریخچه و مراحل حل این روش آشنا خواهیم شد.
آموزش جامع انواع دستورات توزیع نرمال در متلب
در این مقاله انواع دستورات توزیع نرمال در متلب را به شما آموزش میدهیم.همچنین نحوه کار با توزیع های نرمال تک متغیره و چند متغیره را با جزئیات خواهید آموخت.
1 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.