وبلاگ
رسم نمودارهای دو بعدی در متلب: از خطی تا پراکندگی (کدهای کاربردی)
فهرست مطالب
“تسلط به برنامهنویسی پایتون با هوش مصنوعی: آموزش کدنویسی هوشمند با ChatGPT”
"تسلط به برنامهنویسی پایتون با هوش مصنوعی: آموزش کدنویسی هوشمند با ChatGPT"
"با شرکت در این دوره جامع و کاربردی، به راحتی مهارتهای برنامهنویسی پایتون را از سطح مبتدی تا پیشرفته با کمک هوش مصنوعی ChatGPT بیاموزید. این دوره، با بیش از 6 ساعت محتوای آموزشی، شما را قادر میسازد تا به سرعت الگوریتمهای پیچیده را درک کرده و اپلیکیشنهای هوشمند ایجاد کنید. مناسب برای تمامی سطوح با زیرنویس فارسی حرفهای و امکان دانلود و تماشای آنلاین."
ویژگیهای کلیدی:
بدون نیاز به تجربه قبلی برنامهنویسی
زیرنویس فارسی با ترجمه حرفهای
۳۰ ٪ تخفیف ویژه برای دانشجویان و دانش آموزان
0 تا 100 عطرسازی + (30 فرمولاسیون اختصاصی حامی صنعت)
دوره آموزش Flutter و برنامه نویسی Dart [پروژه محور]
دوره جامع آموزش برنامهنویسی پایتون + هک اخلاقی [با همکاری شاهک]
دوره جامع آموزش فرمولاسیون لوازم آرایشی
دوره جامع علم داده، یادگیری ماشین، یادگیری عمیق و NLP
دوره فوق فشرده مکالمه زبان انگلیسی (ویژه بزرگسالان)
شمع سازی و عودسازی با محوریت رایحه درمانی
صابون سازی (دستساز و صنعتی)
صفر تا صد طراحی دارو
متخصص طب سنتی و گیاهان دارویی
متخصص کنترل کیفی شرکت دارویی
رسم نمودارهای دو بعدی در متلب: از خطی تا پراکندگی (کدهای کاربردی)
متلب (MATLAB) به عنوان یک محیط قدرتمند برای محاسبات عددی، برنامهنویسی و تجسم دادهها، جایگاه ویژهای در میان مهندسان، دانشمندان و محققان دارد. یکی از مهمترین قابلیتهای متلب، توانایی آن در تولید نمودارهای با کیفیت بالا و سفارشیسازیشده است که امکان تحلیل عمیقتر دادهها و ارائه مؤثر نتایج را فراهم میآورد. تجسم دادهها تنها یک مرحله در فرآیند تحلیل نیست، بلکه ابزاری حیاتی برای درک الگوها، شناسایی روندها، و کشف روابط پنهان در مجموعههای دادههای پیچیده است. از نمایش ساده یک تابع ریاضی گرفته تا بصریسازی دادههای تجربی پیچیده، متلب ابزارهای متنوعی را برای رسم انواع نمودارهای دو بعدی در اختیار کاربران قرار میدهد.
این مقاله به بررسی جامع روشها و توابع کاربردی برای رسم نمودارهای دو بعدی در متلب میپردازد. ما از مبانی اولیه رسم نمودارهای خطی شروع کرده و به تدریج به سمت نمودارهای پیشرفتهتر نظیر نمودارهای پراکندگی، میلهای، هیستوگرام و سایر اشکال تجسم داده حرکت خواهیم کرد. هدف این راهنما، ارائه یک منبع جامع و کاربردی است که ضمن معرفی توابع اصلی، با ارائه مثالهای کدنویسی واضح و قابل اجرا، به شما کمک کند تا مهارتهای خود را در زمینه بصریسازی دادهها در متلب ارتقا دهید. تمرکز ما بر روی جامعه تخصصی است که به دنبال درک عمیقتر و استفاده کارآمدتر از قابلیتهای گرافیکی متلب هستند.
در ادامه، به جزئیات هر یک از این نمودارها، پارامترهای مهم برای سفارشیسازی آنها و نکات کلیدی برای تولید نمودارهای حرفهای و قابل انتشار خواهیم پرداخت. با مطالعه این مقاله، قادر خواهید بود تا دادههای خود را به بهترین شکل ممکن بصریسازی کرده و پیامهای اصلی نهفته در آنها را به وضوح منتقل کنید.
مبانی رسم نمودار در متلب: تابع `plot` و ویژگیهای اولیه
رسم نمودار در متلب با تابع بنیادی plot آغاز میشود. این تابع همهکاره، سنگ بنای اکثر تجسمهای دو بعدی است و امکان نمایش روابط بین متغیرها را به سادهترین شکل فراهم میآورد. درک صحیح نحوه کار با plot و پارامترهای اولیه آن، کلید ورود به دنیای غنی بصریسازی در متلب است.
گام اول: آشنایی با تابع `plot`
سادهترین شکل استفاده از تابع plot زمانی است که تنها یک بردار را به عنوان ورودی به آن میدهیم. در این حالت، متلب مقادیر آن بردار را بر روی محور Y و اندیسهای (اینکسهای) آن را بر روی محور X رسم میکند.
% مثال 1: رسم یک موج سینوسی ساده
x = 0:0.1:2*pi; % ایجاد بردار X از 0 تا 2*pi با گام 0.1
y = sin(x); % محاسبه مقادیر Y (sin(x))
plot(y); % رسم Y در مقابل اندیسها
خروجی این کد، یک موج سینوسی را نمایش میدهد که محور افقی آن از 1 تا طول بردار y متغیر است. برای رسم دقیقتر و کنترل کامل بر محور X، معمولاً هر دو بردار X و Y را به تابع plot میدهیم:
% مثال 2: رسم موج سینوسی با محور X مشخص
x = 0:0.1:2*pi;
y = sin(x);
plot(x, y);
این روش استاندارد رسم نمودارهای خطی است و به شما امکان میدهد تا متغیر مستقل را به دقت کنترل کنید.
سفارشیسازی خط، رنگ و نشانگر (Marker)
متلب به شما اجازه میدهد تا با استفاده از یک رشته مشخصکننده خط (line specification) ظاهر نمودار را سفارشیسازی کنید. این رشته میتواند شامل سه بخش باشد: مشخصکننده رنگ، مشخصکننده سبک خط و مشخصکننده نشانگر.
- رنگها:
'r'(قرمز),'g'(سبز),'b'(آبی),'c'(فیروزهای),'m'(سرخابی),'y'(زرد),'k'(سیاه),'w'(سفید). - سبک خطوط:
'-'(خط ممتد),'--'(خط چین),':'(نقطه چین),'-.'(خط نقطه). - نشانگرها:
'o'(دایره),'+'(به علاوه),'*'(ستاره),'.'(نقطه),'x'(ضربدر),'s'(مربع),'d'(الماس),'^'(مثلث رو به بالا),'v'(مثلث رو به پایین),'>'(مثلث رو به راست),'<'(مثلث رو به چپ),'p'(پنج ضلعی),'h'(شش ضلعی).
% مثال 3: سفارشیسازی ظاهر نمودار
x = -2*pi:0.1:2*pi;
y1 = sin(x);
y2 = cos(x);
% رسم با خط چین قرمز و نشانگر دایرهای
plot(x, y1, 'r--o');
hold on; % برای نگه داشتن نمودار قبلی و رسم نمودار جدید روی آن
% رسم با خط ممتد آبی و نشانگر ستارهای
plot(x, y2, 'b:*');
hold off; % آزاد کردن حالت نگهدارنده
با استفاده از hold on و hold off میتوانید چندین نمودار را روی یک محور رسم کنید. hold on به متلب دستور میدهد که نمودارهای جدید را بدون پاک کردن نمودارهای قبلی به پنجره فعلی اضافه کند.
افزودن عنوان، برچسب محورها و افسانه (Legend)
یک نمودار بدون عنوان و برچسب محورها اطلاعات ناقصی ارائه میدهد. برای افزایش خوانایی و درک نمودار، باید این عناصر را به آن اضافه کنید.
title('عنوان نمودار'): عنوان اصلی نمودار را تنظیم میکند.xlabel('برچسب محور X'): برچسب محور افقی را تنظیم میکند.ylabel('برچسب محور Y'): برچسب محور عمودی را تنظیم میکند.legend('سری 1', 'سری 2', ...): یک افسانه اضافه میکند که نام هر خط نمودار را مشخص میکند.
% مثال 4: نمودار با عنوان، برچسب و افسانه
x = 0:0.01:10;
y1 = exp(-0.5*x) .* sin(2*x);
y2 = exp(-0.5*x) .* cos(2*x);
plot(x, y1, 'r-');
hold on;
plot(x, y2, 'b--');
hold off;
title('پاسخ سیستمهای میرا شده');
xlabel('زمان (ثانیه)');
ylabel('دامنه');
legend('تابع سینوسی میرا شده', 'تابع کسینوسی میرا شده', 'Location', 'northeast'); % 'Location' موقعیت افسانه را تنظیم میکند
grid on; % اضافه کردن شبکه بندی
پارامتر 'Location' در legend به شما امکان میدهد موقعیت افسانه را کنترل کنید (مانند 'northeast'، 'northwest'، 'best'). اضافه کردن grid on نیز به شما کمک میکند تا خطوط شبکه را برای خوانایی بهتر نمودار اضافه کنید.
کنترل محدوده محورها و شبکه بندی (Grid)
تنظیم دستی محدوده محورها میتواند برای تمرکز بر بخشهای خاصی از دادهها یا بهبود زیباییشناسی نمودار مفید باشد.
xlim([min_x max_x]): محدوده محور X را تنظیم میکند.ylim([min_y max_y]): محدوده محور Y را تنظیم میکند.axis([min_x max_x min_y max_y]): هر دو محدوده X و Y را به صورت همزمان تنظیم میکند.grid on/grid off: شبکه بندی را روشن یا خاموش میکند.grid minor: شبکه بندی فرعی را اضافه میکند.
% مثال 5: تنظیم محدوده محورها و شبکه بندی
x = linspace(-5, 5, 100);
y = x.^2;
plot(x, y, 'Color', [0.85 0.325 0.098], 'LineWidth', 1.5); % تنظیم رنگ و ضخامت خط با ویژگیها
title('نمودار تابع y = x^2');
xlabel('مقدار X');
ylabel('مقدار Y');
xlim([-3 3]); % محدوده X از -3 تا 3
ylim([0 9]); % محدوده Y از 0 تا 9
grid on;
grid minor; % اضافه کردن شبکه بندی فرعی
استفاده از 'Color' با یک بردار RGB سه عضوی (هر عضو بین 0 و 1) به شما امکان میدهد رنگهای دلخواه را تنظیم کنید. 'LineWidth' نیز ضخامت خط را مشخص میکند.
درک این مبانی اساسی به شما ابزارهای لازم را برای ایجاد نمودارهای دو بعدی کاربردی و قابل فهم در متلب میدهد. از این نقطه به بعد، میتوانیم به بررسی قابلیتهای پیشرفتهتر و انواع دیگر نمودارهای دو بعدی بپردازیم.
نمودارهای خطی پیشرفته و سفارشیسازی
در متلب، فراتر از رسم نمودارهای خطی ساده، امکانات گستردهای برای سفارشیسازی و نمایش دادهها به اشکال پیچیدهتر وجود دارد. این بخش به بررسی روشهای رسم چندین نمودار، استفاده از محور Y دوگانه و نمودارهای گسسته میپردازد که هر یک برای سناریوهای خاصی از تجسم دادهها کاربرد دارند.
رسم چندین نمودار در یک محور
همانطور که قبلاً اشاره شد، برای رسم چندین نمودار بر روی یک محور، از دستور hold on استفاده میشود. این قابلیت برای مقایسه مستقیم توابع یا سریهای داده مختلف در یک کادر مرجع واحد بسیار مفید است.
% مثال 6: مقایسه توابع نمایی و لگاریتمی
x = 0.1:0.01:10;
y_exp = exp(x/2);
y_log = log(x);
figure; % ایجاد یک پنجره نمودار جدید
plot(x, y_exp, 'r-^', 'LineWidth', 1.5, 'MarkerSize', 6);
hold on; % نگه داشتن نمودار فعلی
plot(x, y_log, 'b--o', 'LineWidth', 1.5, 'MarkerSize', 6);
hold off;
title('مقایسه توابع نمایی و لگاریتمی');
xlabel('X');
ylabel('Y');
legend('Exponential (e^{x/2})', 'Logarithmic (ln(x))', 'Location', 'northwest');
grid on;
در این مثال، دو تابع با مشخصات خط متفاوت رسم شدهاند. figure یک پنجره نمودار جدید ایجاد میکند که برای جدا کردن نمودارها از یکدیگر مفید است.
رسم نمودار با محور Y دوگانه (`yyaxis`)
گاهی اوقات نیاز است که دو سری داده با مقیاسهای بسیار متفاوت را در یک نمودار و بر اساس یک محور X مشترک نمایش دهیم. در چنین مواردی، استفاده از دو محور Y (یکی در سمت چپ و دیگری در سمت راست) بسیار کارآمد است. تابع yyaxis این قابلیت را فراهم میکند.
% مثال 7: نمایش دما و فشار بر حسب زمان
time = 0:0.1:20; % زمان در ثانیه
temperature = 20 + 5*sin(time/2) + randn(size(time))*0.5; % دما در درجه سانتیگراد
pressure = 100 + 10*cos(time/3) + randn(size(time))*0.2; % فشار در کیلوپاسکال
figure;
yyaxis left; % محور Y سمت چپ را فعال میکند
plot(time, temperature, 'r-', 'LineWidth', 1.2);
ylabel('دما (درجه سانتیگراد)');
ylim([10 30]); % تنظیم محدوده محور Y چپ
yyaxis right; % محور Y سمت راست را فعال میکند
plot(time, pressure, 'b--', 'LineWidth', 1.2);
ylabel('فشار (کیلوپاسکال)');
ylim([80 120]); % تنظیم محدوده محور Y راست
title('تغییرات دما و فشار بر حسب زمان');
xlabel('زمان (ثانیه)');
legend('دما', 'فشار', 'Location', 'southwest');
grid on;
yyaxis left یا yyaxis right مشخص میکند که دستورات plot بعدی از کدام محور Y استفاده کنند. این روش برای مقایسه دو پدیده فیزیکی یا مهندسی که به طور همزمان رخ میدهند اما واحدهای اندازهگیری یا دامنههای متفاوتی دارند، ایدهآل است.
نمودارهای گسسته: تابع `stem` و `stairs`
برای نمایش دادههای گسسته یا سیگنالهای دیجیتال، نمودارهای خطی معمولی ممکن است مناسب نباشند. متلب دو تابع اصلی برای این منظور ارائه میدهد: stem برای نمایش دادهها به صورت ساقه و برگ و stairs برای نمایش دادهها به صورت پلهای.
نمودار ساقه و برگ (`stem`)
تابع stem دادهها را به صورت خطوطی از محور X تا نقطه داده با یک نشانگر در انتها نمایش میدهد. این نمودار برای نمایش توالیهای گسسته در پردازش سیگنال یا دادههای نمونهبرداری شده بسیار مفید است.
% مثال 8: نمایش سیگنال گسسته با stem
n = 0:1:10; % اندیسهای گسسته
x_n = (0.9).^n .* cos(pi*n/4); % یک سیگنال گسسته
figure;
stem(n, x_n, 'filled', 'LineStyle', ':', 'Color', [0.4 0.6 0.8], 'Marker', 'd', 'MarkerFaceColor', [0.4 0.6 0.8]);
title('نمودار سیگنال گسسته');
xlabel('اندیس (n)');
ylabel('دامنه x[n]');
grid on;
پارامتر 'filled' نشانگرها را پر میکند. همچنین میتوانید با ویژگیهایی مانند 'LineStyle'، 'Color'، 'Marker' و 'MarkerFaceColor' ظاهر ساقه و نشانگر را سفارشیسازی کنید.
نمودار پلهای (`stairs`)
تابع stairs دادهها را به صورت یک سری پله نمایش میدهد. این نمودار برای نمایش توابع پلهای، پاسخهای پلهای سیستمها، یا هر دادهای که تغییرات آن ناگهانی و گسسته است، کاربرد دارد.
% مثال 9: نمایش تابع پلهای با stairs
t = 0:0.5:10; % زمان
u_t = (t >= 3) - (t >= 7); % یک تابع پلهای با دو پله
figure;
stairs(t, u_t, 'g-', 'LineWidth', 1.5);
title('نمودار تابع پلهای');
xlabel('زمان');
ylabel('مقدار');
ylim([-0.5 1.5]);
grid on;
stairs به وضوح نقاط تغییر ناگهانی را برجسته میکند و برای تجسم سیستمهای کنترل دیجیتال یا دادههای گسسته زمانی بسیار مناسب است.
سفارشیسازی پیشرفته خطوط و نقاط
متلب امکان کنترل دقیق بر ظاهر هر جنبه از خطوط و نشانگرها را از طریق جفتهای 'Property', Value فراهم میکند. این رویکرد به شما انعطافپذیری بسیار بالایی در طراحی نمودارها میدهد.
'LineWidth': ضخامت خط را تنظیم میکند (مقدار عددی).'Color': رنگ خط را تنظیم میکند (بردار RGB یا نام رنگ).'LineStyle': سبک خط را تنظیم میکند (مانند'-','--').'Marker': نوع نشانگر را تنظیم میکند (مانند'o','s').'MarkerSize': اندازه نشانگر را تنظیم میکند.'MarkerEdgeColor': رنگ لبه نشانگر را تنظیم میکند.'MarkerFaceColor': رنگ پرکننده نشانگر را تنظیم میکند.
% مثال 10: سفارشیسازی پیشرفته خط و نشانگر
t = 0:0.2:4*pi;
y = exp(-0.1*t) .* sin(t*1.5);
figure;
plot(t, y, ...
'LineWidth', 2, ...
'Color', [0.2 0.7 0.3], ... % رنگ سبز تیره
'LineStyle', '-', ...
'Marker', 's', ...
'MarkerSize', 8, ...
'MarkerEdgeColor', [0 0.5 0], ... % لبه نشانگر سبز تیره
'MarkerFaceColor', [0.8 0.9 0.8]); % داخل نشانگر سبز روشن
title('نمودار سفارشی شده با ویژگیهای متعدد');
xlabel('زمان');
ylabel('مقدار');
grid on;
این مثال نشان میدهد که چگونه میتوانید با استفاده از این ویژگیها، یک نمودار بسیار خاص و متناسب با نیازهای خود ایجاد کنید. با ترکیب این روشها، میتوانید نمودارهای خطی با کیفیت بالا و اطلاعات بصری غنی برای ارائه تحقیقات خود تولید نمایید.
نمودارهای پراکندگی (Scatter Plots) و کاربردهای آن
نمودارهای پراکندگی ابزارهای قدرتمندی برای تجسم رابطه بین دو متغیر عددی هستند. این نمودارها به ما کمک میکنند تا الگوها، همبستگیها و نقاط پرت را در دادهها شناسایی کنیم. متلب با تابع scatter امکانات گستردهای برای ایجاد و سفارشیسازی این نمودارها فراهم میکند.
تابع `scatter` برای نمایش روابط
اساسیترین کاربرد تابع scatter نمایش جفتهای (x, y) به صورت نقاط منفرد است. برخلاف plot که نقاط را با خطوط به هم وصل میکند، scatter هر نقطه را به صورت مجزا نمایش میدهد.
% مثال 11: نمودار پراکندگی ساده
% فرض کنید دادههای تصادفی برای دو متغیر داریم
rng(1); % برای تکرارپذیری نتایج تصادفی
x = randn(100, 1) * 10; % 100 نقطه داده با توزیع نرمال
y = 2*x + 5 + randn(100, 1) * 5; % Y وابسته به X با کمی نویز
figure;
scatter(x, y, 'filled', 'MarkerFaceColor', [0.8 0.2 0.2], 'MarkerEdgeColor', [0.5 0.1 0.1]);
title('نمودار پراکندگی ساده: X در مقابل Y');
xlabel('متغیر X');
ylabel('متغیر Y');
grid on;
در این مثال، 'filled' باعث میشود نشانگرها پر شوند، و 'MarkerFaceColor' و 'MarkerEdgeColor' رنگ پرکننده و لبه نشانگرها را به ترتیب تنظیم میکنند. این نمودار به وضوح یک همبستگی خطی مثبت بین X و Y را نشان میدهد.
افزودن تغییرات اندازه و رنگ به نقاط
قدرت واقعی scatter زمانی آشکار میشود که از آن برای نمایش سه یا چهار متغیر به طور همزمان استفاده میکنیم. این کار با تغییر اندازه (s) و رنگ (c) هر نقطه انجام میشود:
scatter(x, y, s, c)
s: برداری از اندازههای نشانگر است. اگرsیک اسکالر باشد، تمام نشانگرها یک اندازه خواهند داشت. اگرsیک بردار باشد، هر عنصر آن اندازه نشانگر مربوطه را کنترل میکند.c: برداری از مقادیر رنگ است. متلب از این مقادیر برای نگاشت به یک نقشه رنگی (colormap) استفاده میکند و هر نقطه را با رنگی متناسب با مقدارش نمایش میدهد. اگرcیک اسکالر باشد، همه نشانگرها یک رنگ خواهند داشت.
% مثال 12: نمودار پراکندگی با اندازه و رنگ متغیر
rng(2);
x = randn(100, 1);
y = randn(100, 1);
z = x.^2 + y.^2; % متغیر سوم برای رنگ
s_data = 50 + 100*rand(100, 1); % متغیر چهارم برای اندازه
figure;
scatter(x, y, s_data, z, 'filled'); % s_data برای اندازه، z برای رنگ
colorbar; % نمایش نوار رنگ
colormap('jet'); % استفاده از نقشه رنگی 'jet'
title('نمودار پراکندگی با اندازه و رنگ متغیر');
xlabel('X');
ylabel('Y');
ylabel(colorbar, 'مقدار Z'); % برچسب نوار رنگ
grid on;
در این مثال، نه تنها رابطه بین X و Y نمایش داده میشود، بلکه متغیر Z با رنگ نقاط و یک متغیر دیگر (s_data) با اندازه نقاط کدگذاری شده است. این روش برای تجسم دادههای چندبعدی بسیار قدرتمند است.
نمودارهای پراکندگی با دادههای دستهبندی شده
برای نمایش دادههای پراکندگی بر اساس دستههای مختلف، میتوان از حلقهها یا توابع خاصی استفاده کرد تا هر دسته با رنگ یا نشانگر متفاوتی نمایش داده شود.
% مثال 13: پراکندگی دادههای دستهبندی شده (جنسیت و درآمد)
rng(3);
num_people = 200;
age = randi([20, 60], num_people, 1);
income = 30000 + 500*age + randn(num_people, 1)*5000;
gender = randi([0, 1], num_people, 1); % 0 برای زن، 1 برای مرد
figure;
hold on;
% رسم دادههای زنان (gender == 0)
scatter(age(gender==0), income(gender==0), 100, 'b', 's', 'filled', 'DisplayName', 'زن');
% رسم دادههای مردان (gender == 1)
scatter(age(gender==1), income(gender==1), 100, 'r', 'o', 'filled', 'DisplayName', 'مرد');
hold off;
title('رابطه سن و درآمد بر اساس جنسیت');
xlabel('سن');
ylabel('درآمد');
legend('show');
grid on;
در این مثال، با استفاده از فیلتر کردن برداری (gender==0 و gender==1)، دو گروه از دادهها با رنگها و نشانگرهای متفاوت رسم شدهاند. 'DisplayName' برای نمایش نام هر سری در افسانه استفاده میشود.
تحلیل همبستگی با نمودارهای پراکندگی
نمودارهای پراکندگی ابزار بصری اولیه برای تحلیل همبستگی هستند. با نگاه کردن به الگوی نقاط، میتوان تشخیص داد که آیا رابطه خطی، غیرخطی، یا اصلاً رابطهای بین متغیرها وجود دارد.
- **همبستگی مثبت:** نقاط به صورت یک خط رو به بالا از چپ به راست قرار میگیرند.
- **همبستگی منفی:** نقاط به صورت یک خط رو به پایین از چپ به راست قرار میگیرند.
- **عدم همبستگی:** نقاط به صورت تصادفی و بدون الگوی مشخص پخش شدهاند.
- **همبستگی غیرخطی:** نقاط یک الگوی خمیده را دنبال میکنند (مانند منحنی).
% مثال 14: بررسی همبستگی با دادههای واقعینماتر
% دادههای فرضی: ساعات مطالعه و نمره امتحان
rng(4);
study_hours = 1 + rand(50,1) * 9; % 1 تا 10 ساعت
exam_score_pos = 50 + 5*study_hours + randn(50,1)*5; % همبستگی مثبت
exam_score_neg = 100 - 4*study_hours + randn(50,1)*5; % همبستگی منفی
random_data = 50 + randn(50,1)*15; % بدون همبستگی
figure;
subplot(1,3,1);
scatter(study_hours, exam_score_pos, 'b', 'filled');
title('همبستگی مثبت');
xlabel('ساعات مطالعه');
ylabel('نمره امتحان');
xlim([0 11]); ylim([40 100]);
grid on;
subplot(1,3,2);
scatter(study_hours, exam_score_neg, 'r', 'filled');
title('همبستگی منفی');
xlabel('ساعات مطالعه');
ylabel('نمره امتحان');
xlim([0 11]); ylim([40 100]);
grid on;
subplot(1,3,3);
scatter(study_hours, random_data, 'g', 'filled');
title('بدون همبستگی');
xlabel('ساعات مطالعه');
ylabel('نمره امتحان');
xlim([0 11]); ylim([40 100]);
grid on;
این سه نمودار در یک پنجره با استفاده از subplot (که در بخشهای بعدی به تفصیل توضیح داده میشود) به ما امکان میدهند تا انواع همبستگی را به صورت بصری درک کنیم. نمودارهای پراکندگی نه تنها برای کشف روابط، بلکه برای شناسایی نقاط پرت (outliers) نیز مفید هستند؛ نقاطی که به طور قابل توجهی از الگوی کلی دادهها خارج میشوند.
با استفاده از scatter و قابلیتهای سفارشیسازی آن، میتوانید بصریسازیهای قدرتمندی برای درک و ارائه روابط دادههای خود ایجاد کنید.
نمودارهای تخصصی دو بعدی
متلب علاوه بر نمودارهای خطی و پراکندگی، توابع متعددی برای رسم انواع دیگر نمودارهای دو بعدی تخصصی ارائه میدهد که هر کدام برای نوع خاصی از دادهها و اهداف تجسمی بهینه شدهاند. این نمودارها شامل میلهای، مساحت، دایرهای و هیستوگرام هستند.
نمودارهای میلهای (Bar Plots)
نمودارهای میلهای برای مقایسه مقادیر بین دستههای مختلف یا نمایش تغییرات یک متغیر در طول زمان برای دستههای گسسته استفاده میشوند. تابع bar در متلب برای این منظور کاربرد دارد.
% مثال 15: نمودار میلهای ساده
categories = {'A', 'B', 'C', 'D', 'E'};
values = [25, 32, 18, 45, 29];
figure;
bar(categories, values, 'FaceColor', [0.4660 0.6740 0.1880]); % تنظیم رنگ میلهها
title('مقایسه مقادیر بین دستهها');
xlabel('دسته');
ylabel('مقدار');
grid on;
bar(categories, values) یک نمودار میلهای با نام دستهها در محور X و مقادیر در محور Y ایجاد میکند.
نمودارهای میلهای گروهی و انباشته
اگر بخواهید چندین سری داده را در هر دسته مقایسه کنید، میتوانید از نمودارهای میلهای گروهی (grouped) یا انباشته (stacked) استفاده کنید.
% مثال 16: نمودار میلهای گروهی و انباشته
data = [10 20 30; 25 15 35; 18 22 28; 30 10 20]; % 4 دسته، 3 سری
labels = {'Q1', 'Q2', 'Q3', 'Q4'}; % ربع سال
figure;
subplot(1,2,1);
bar(labels, data, 'grouped');
title('نمودار میلهای گروهی');
ylabel('فروش');
legend('محصول A', 'محصول B', 'محصول C', 'Location', 'northwest');
grid on;
subplot(1,2,2);
bar(labels, data, 'stacked');
title('نمودار میلهای انباشته');
ylabel('فروش کلی');
legend('محصول A', 'محصول B', 'محصول C', 'Location', 'northwest');
grid on;
bar(..., 'grouped') میلههای هر دسته را در کنار هم نمایش میدهد، در حالی که bar(..., 'stacked') آنها را روی هم انباشته میکند که برای نمایش سهم هر جزء در کل مفید است.
نمودارهای مساحت (Area Plots)
نمودارهای مساحت برای نمایش تغییرات کمی یک یا چند سری داده در طول زمان یا یک متغیر پیوسته دیگر استفاده میشوند، به طوری که ناحیه زیر خطوط پر میشود. این نمودارها میتوانند برای نمایش سهم انباشته اجزا یا روندهای کلی مفید باشند.
% مثال 17: نمودار مساحت برای سهم فروش
years = 2018:2022;
sales_product1 = [100 120 150 130 160];
sales_product2 = [80 90 110 100 120];
sales_product3 = [60 70 80 90 100];
% ترکیب دادهها در یک ماتریس برای area
sales_data = [sales_product1; sales_product2; sales_product3]'; % تبدیل به ستونها
figure;
area(years, sales_data);
title('سهم فروش محصولات در طول سالها');
xlabel('سال');
ylabel('میزان فروش');
legend('محصول 1', 'محصول 2', 'محصول 3', 'Location', 'northwest');
grid on;
colormap('cool'); % تغییر نقشه رنگی
وقتی یک ماتریس به area میدهید، متلب به صورت خودکار یک نمودار مساحتی انباشته (stacked area plot) ایجاد میکند که مجموع هر ستون را نشان میدهد و هر ردیف را به عنوان یک لایه مساحت مجزا نمایش میدهد.
نمودارهای دایرهای (Pie Charts)
نمودارهای دایرهای برای نمایش سهم هر دسته از یک کل (درصدها) استفاده میشوند. تابع pie این کار را انجام میدهد.
% مثال 18: توزیع بودجه
expenses = [300, 200, 150, 100, 50]; % هزینهها
expense_labels = {'اجاره', 'غذا', 'حمل و نقل', 'سرگرمی', 'پسانداز'};
figure;
pie(expenses, expense_labels);
title('توزیع بودجه ماهانه');
colormap('parula'); % تغییر نقشه رنگی
تابع pie به طور خودکار درصد هر بخش را محاسبه کرده و بر روی نمودار نمایش میدهد.
جدا کردن بخشها (Exploding Slices)
برای برجستهسازی یک یا چند بخش از نمودار دایرهای، میتوانید از بردار explode استفاده کنید:
% مثال 19: برجستهسازی بخشی از نمودار دایرهای
explode = [0 0 1 0 0]; % سومین بخش را جدا میکند (1 یعنی جدا شود، 0 یعنی جدا نشود)
figure;
pie(expenses, explode, expense_labels);
title('توزیع بودجه ماهانه (با برجستهسازی)');
colormap('jet');
این کار میتواند برای جلب توجه به یک جزء خاص در توزیع کلی مفید باشد.
هیستوگرامها (Histograms) برای توزیع داده
هیستوگرامها ابزارهای اساسی برای تجسم توزیع دادههای عددی هستند. آنها فرکانس یا تعداد دفعات وقوع مقادیر در بازههای مختلف (bin) را نشان میدهند. تابع histogram در متلب نسخه مدرن و توصیه شده برای این کار است.
% مثال 20: هیستوگرام دادههای تصادفی
rng(5);
data = randn(1000, 1) * 2 + 5; % 1000 نقطه داده با توزیع نرمال (میانگین 5، انحراف معیار 2)
figure;
histogram(data);
title('هیستوگرام توزیع داده');
xlabel('مقادیر');
ylabel('تعداد وقوع');
grid on;
به طور پیشفرض، histogram تعداد binها را به صورت خودکار تعیین میکند. میتوانید تعداد binها یا لبههای binها را کنترل کنید.
تنظیم تعداد Binها یا لبههای Bin
% مثال 21: کنترل تعداد binها
figure;
subplot(1,2,1);
histogram(data, 10); % 10 bin
title('هیستوگرام با 10 Bin');
xlabel('مقادیر');
ylabel('تعداد وقوع');
grid on;
subplot(1,2,2);
bin_edges = 0:1:10; % لبههای bin از 0 تا 10 با گام 1
histogram(data, bin_edges);
title('هیستوگرام با Binهای سفارشی');
xlabel('مقادیر');
ylabel('تعداد وقوع');
grid on;
تنظیم تعداد یا لبههای bin میتواند تأثیر زیادی بر ظاهر هیستوگرام و بینش حاصل از آن داشته باشد. انتخاب صحیح به ماهیت دادهها و هدفی که از تجسم دارید بستگی دارد.
این نمودارهای تخصصی دو بعدی، در کنار نمودارهای خطی و پراکندگی، مجموعه ابزارهای کاملی را برای تجسم انواع دادهها در متلب فراهم میآورند. درک زمان و نحوه استفاده از هر یک از این توابع برای ایجاد بصریسازیهای مؤثر و گویا بسیار حیاتی است.
مدیریت چند نمودار در یک پنجره: `subplot`
هنگامی که نیاز دارید چندین نمودار را به صورت همزمان برای مقایسه یا نمایش جنبههای مختلف یک تحلیل در یک پنجره واحد سازماندهی کنید، تابع subplot در متلب ابزار اصلی شماست. این تابع به شما اجازه میدهد تا پنجره شکل (figure window) را به یک شبکه تقسیم کرده و هر نمودار را در یک بخش مشخص از آن شبکه رسم کنید.
آرایش ماتریسی نمودارها
سینتکس اساسی subplot به این صورت است:
subplot(m, n, p)
که در آن:
m: تعداد سطرها در شبکه نمودارها.n: تعداد ستونها در شبکه نمودارها.p: موقعیت فعلی نمودار در شبکه (شمارش از چپ به راست، سپس از بالا به پایین انجام میشود).
% مثال 22: آرایش 2x2 نمودارهای مختلف
x = 0:0.1:2*pi;
y1 = sin(x);
y2 = cos(x);
y3 = sin(x) + cos(x);
y4 = x.^2;
figure; % یک پنجره جدید ایجاد میکند
% نمودار 1: بالا چپ (موقعیت 1)
subplot(2, 2, 1);
plot(x, y1, 'r-');
title('تابع Sin(x)');
grid on;
% نمودار 2: بالا راست (موقعیت 2)
subplot(2, 2, 2);
plot(x, y2, 'b--');
title('تابع Cos(x)');
grid on;
% نمودار 3: پایین چپ (موقعیت 3)
subplot(2, 2, 3);
plot(x, y3, 'g:');
title('تابع Sin(x) + Cos(x)');
xlabel('X-axis');
ylabel('Y-axis');
grid on;
% نمودار 4: پایین راست (موقعیت 4)
subplot(2, 2, 4);
plot(x, y4, 'k-.');
title('تابع X^2');
xlabel('X-axis');
ylabel('Y-axis');
grid on;
در این مثال، پنجره شکل به یک شبکه 2x2 تقسیم شده و چهار نمودار مختلف در هر یک از چهار موقعیت رسم میشوند. هر بار که subplot فراخوانی میشود، محورهای فعلی (current axes) را به موقعیت p در شبکه m x n تغییر میدهد. تمام دستورات رسم بعدی (مانند plot، title، xlabel و غیره) به این محورهای جدید اعمال میشوند.
سفارشیسازی `subplot` و نکات مهم
هر زیرنمودار (subplot) یک شیء محور (Axes object) مستقل است و میتوانید هر یک را به طور جداگانه سفارشیسازی کنید. این شامل تنظیم عنوان، برچسبها، محدوده محورها و سایر ویژگیها برای هر نمودار به صورت منحصر به فرد است.
نکات مهم:
- **خوانایی:** هنگام استفاده از
subplot، اطمینان حاصل کنید که هر نمودار به اندازه کافی بزرگ است تا جزئیات آن به وضوح قابل مشاهده باشد. فشرده کردن تعداد زیادی نمودار در یک پنجره کوچک میتواند منجر به از دست رفتن اطلاعات شود. - **برچسبها و عناوین:** هر زیرنمودار باید عنوان و برچسب محورهای خود را داشته باشد، مگر اینکه به وضوح از نمودارهای مجاور قابل استنتاج باشند. برای کل مجموعه زیرنمودارها، میتوانید یک عنوان کلی نیز اضافه کنید.
- **اشتراکگذاری محورها:** گاهی اوقات، نمودارهای مختلفی که در
subplotرسم میشوند، محور X یا Y مشترکی دارند. برای صرفهجویی در فضا و افزایش خوانایی، میتوانید برچسبهای محور مشترک را فقط در نمودارهای حاشیهای (مثلاً پایینترین برای X و چپترین برای Y) نمایش دهید. توابعی مانندlinkaxesنیز میتوانند برای همگامسازی محدوده محورها بین زیرنمودارها استفاده شوند.
% مثال 23: Subplot با محورهای مشترک و عنوان کلی
x = 0:0.1:10;
y_lin = x;
y_sqrt = sqrt(x);
y_exp = exp(x/5);
figure;
sgtitle('مقایسه توابع ریاضی مختلف'); % عنوان کلی برای کل پنجره شکل
subplot(3,1,1);
plot(x, y_lin, 'm-', 'LineWidth', 1.5);
title('خطی');
ylabel('مقدار');
grid on;
set(gca, 'XTickLabel', []); % حذف برچسبهای محور X برای نمودار بالا
subplot(3,1,2);
plot(x, y_sqrt, 'c--', 'LineWidth', 1.5);
title('جذر');
ylabel('مقدار');
grid on;
set(gca, 'XTickLabel', []); % حذف برچسبهای محور X برای نمودار میانی
subplot(3,1,3);
plot(x, y_exp, 'y:', 'LineWidth', 1.5);
title('نمایی');
xlabel('متغیر X');
ylabel('مقدار');
grid on;
در این مثال، sgtitle یک عنوان کلی برای کل پنجره شکل اضافه میکند. با استفاده از set(gca, 'XTickLabel', [])، برچسبهای محور X برای نمودارهای بالا و میانی حذف میشوند تا از تکرار جلوگیری شود و نمودار نهایی تمیزتر به نظر برسد. این رویکرد به ویژه در گزارشها و مقالات علمی که فضای بصری محدود است، مفید است.
subplot یک ابزار ضروری برای سازماندهی و ارائه دادهها به شیوهای مؤثر است که امکان مقایسه آسان و درک جامعتری از روابط دادهها را فراهم میکند.
ذخیره و خروجی گرفتن از نمودارها
پس از صرف زمان و تلاش برای ایجاد نمودارهای با کیفیت بالا در متلب، مرحله نهایی و حیاتی، ذخیره و خروجی گرفتن از آنها با فرمت مناسب است. متلب ابزارهای متنوعی برای این منظور ارائه میدهد که به شما امکان میدهد نمودارهای خود را برای استفاده در گزارشها، مقالات علمی، ارائهها یا وبسایتها آماده کنید.
ذخیره به فرمتهای تصویری و وکتور
متلب به شما اجازه میدهد تا نمودارها را در فرمتهای پیکسلی (raster formats) مانند PNG، JPEG، TIFF و همچنین فرمتهای برداری (vector formats) مانند PDF و EPS ذخیره کنید. فرمتهای برداری برای انتشار علمی و هر جا که نیاز به مقیاسپذیری بدون از دست دادن کیفیت دارید، توصیه میشوند.
استفاده از `saveas`
تابع saveas سادهترین راه برای ذخیره یک نمودار است.
saveas(fig_handle, 'filename.format')
fig_handle: دسته (handle) پنجره شکل مورد نظر برای ذخیره است. اگر آن را حذف کنید، نمودار فعال فعلی (current figure) ذخیره میشود.'filename.format': نام فایل به همراه پسوند فرمت خروجی.
% مثال 24: ذخیره نمودار در فرمتهای مختلف
x = linspace(0, 2*pi, 100);
y = sin(x) + randn(size(x))*0.1;
fig = figure('Name', 'My_Sin_Plot');
plot(x, y, 'b-o', 'MarkerSize', 4);
title('نمودار سینوسی با نویز');
xlabel('X');
ylabel('Y');
grid on;
% ذخیره به عنوان PNG (فرمت پیکسلی)
saveas(fig, 'sin_plot.png');
% ذخیره به عنوان PDF (فرمت برداری)
saveas(fig, 'sin_plot.pdf');
% ذخیره به عنوان EPS (فرمت برداری، اغلب برای LaTeX)
saveas(fig, 'sin_plot.eps');
% ذخیره به عنوان JPEG
saveas(fig, 'sin_plot.jpg');
توجه داشته باشید که فرمتهای پیکسلی (مانند PNG, JPG) در هنگام بزرگنمایی ممکن است کیفیت خود را از دست بدهند، در حالی که فرمتهای برداری (مانند PDF, EPS) میتوانند بدون افت کیفیت به هر اندازهای بزرگ شوند.
استفاده از `print` برای کنترل بیشتر
تابع print کنترل بیشتری بر روی کیفیت، رزولوشن و سایر ویژگیهای خروجی فراهم میکند.
print('filename', '-dformat', '-rDPI', fig_handle)
'filename': نام فایل.'-dformat': نوع فرمت خروجی (مثلاً'-dpng'،'-dpdf'،'-depsc').'-depsc'برای Encapsulated PostScript رنگی است.'-rDPI': رزولوشن برای فرمتهای پیکسلی (مثلاً'-r300'برای 300 نقطه در اینچ).
% مثال 25: ذخیره با استفاده از تابع print
fig = figure;
plot(rand(1,10));
title('نمودار تصادفی');
% ذخیره به عنوان PNG با رزولوشن 300dpi
print('random_plot_300dpi', '-dpng', '-r300');
% ذخیره به عنوان JPEG با رزولوشن 600dpi
print('random_plot_600dpi', '-djpeg', '-r600');
% ذخیره به عنوان PDF
print('random_plot', '-dpdf');
% ذخیره به عنوان EPS (رنگی)
print('random_plot', '-depsc');
استفاده از print به ویژه برای فرمتهای پیکسلی که نیاز به رزولوشن بالا دارند (مثلاً برای چاپ)، توصیه میشود.
تنظیمات پیش از ذخیره برای کیفیت بالا
برای اطمینان از اینکه نمودارهای ذخیره شده شما با بالاترین کیفیت ممکن هستند، میتوانید برخی تنظیمات را قبل از ذخیره اعمال کنید:
- **اندازه کاغذ:** متلب به طور پیشفرض اندازه و موقعیت نمودار را بر اساس آنچه در پنجره شکل میبینید تنظیم میکند. برای خروجیهای دقیق، میتوانید
'PaperPositionMode'را روی'auto'تنظیم کنید تا اندازه شکل (figure) دقیقاً مانند صفحه کاغذ شود و سپس'PaperUnits'و'PaperSize'را برای کنترل ابعاد خروجی تنظیم کنید. - **کیفیت رندرینگ:** برای فرمتهای پیکسلی، رزولوشن (DPI) را بالا ببرید (حداقل 300dpi برای انتشارات، 600dpi یا بیشتر برای تصاویر با جزئیات بالا).
- **فونتها:** اطمینان حاصل کنید که فونتها و اندازههای آنها به اندازه کافی بزرگ و خوانا هستند، حتی پس از کوچک شدن نمودار. از فونتهایی استفاده کنید که در فرمتهای برداری به درستی رندر میشوند (مانند Times New Roman, Arial).
% مثال 26: تنظیمات پیش از ذخیره
x = 0:0.01:5;
y = sin(x).*exp(-x/2);
fig = figure('Units', 'inches', 'Position', [0 0 6 4]); % تنظیم اندازه پنجره شکل به اینچ
plot(x, y, 'Color', [0.1 0.5 0.8], 'LineWidth', 1.8);
title('نمودار میرا شده', 'FontSize', 14, 'FontWeight', 'bold');
xlabel('زمان (s)', 'FontSize', 12);
ylabel('دامنه', 'FontSize', 12);
grid on;
set(gca, 'FontSize', 10, 'FontName', 'Arial'); % تنظیم فونت محورها و تیکها
% تنظیمات برای خروجی با کیفیت بالا
set(gcf, 'PaperUnits', 'inches');
set(gcf, 'PaperSize', [6 4]); % اندازه خروجی نهایی
set(gcf, 'PaperPositionMode', 'auto'); % تنظیم خودکار موقعیت روی کاغذ
% ذخیره به PDF با کیفیت بالا
print(fig, 'high_quality_damped_plot.pdf', '-dpdf', '-bestfit'); % -bestfit برای PDF
% ذخیره به PNG با رزولوشن بالا
print(fig, 'high_quality_damped_plot.png', '-dpng', '-r600');
-bestfit در تابع print برای PDF تلاش میکند تا نمودار را به بهترین شکل ممکن در صفحه جای دهد. مدیریت PaperUnits، PaperSize و PaperPositionMode به شما کنترل دقیقی بر ابعاد نهایی فایل خروجی میدهد.
با رعایت این نکات و استفاده صحیح از توابع saveas و print، میتوانید نمودارهایی با بالاترین کیفیت ممکن از متلب خروجی بگیرید که برای هر نوع استفادهای، از ارائه شفاهی گرفته تا چاپ در مجلات معتبر، مناسب باشند.
بهترین شیوهها برای رسم نمودار حرفهای در متلب
تولید نمودارها در متلب تنها به دانش توابع رسم محدود نمیشود؛ بلکه نیازمند درک عمیقتر از اصول طراحی بصری و بهترین شیوهها برای انتقال مؤثر اطلاعات است. یک نمودار حرفهای باید نه تنها از نظر فنی صحیح باشد، بلکه باید زیبا، خوانا و عاری از هرگونه ابهام باشد.
وضوح و خوانایی
مهمترین جنبه یک نمودار خوب، توانایی آن در انتقال واضح و بدون ابهام پیام اصلی به مخاطب است.
-
انتخاب نوع نمودار مناسب: هر نوع نموداری برای نمایش نوع خاصی از دادهها یا روابط بهتر است. مثلاً برای نشان دادن توزیع، هیستوگرام بهتر از نمودار خطی است. برای مقایسه دو متغیر عددی، پراکندگی مناسب است. انتخاب نادرست میتواند منجر به گمراهی شود.
-
عناوین و برچسبهای واضح: هر نمودار باید عنوان، برچسبهای محورها و افسانه (Legend) کاملی داشته باشد. این عناصر باید به قدری واضح باشند که نمودار بدون نیاز به متن توضیحی اضافی، قابل فهم باشد. از واحدهای مناسب در برچسبهای محور استفاده کنید.
-
اجتناب از شلوغی (Clutter): از اضافه کردن جزئیات غیرضروری به نمودار خودداری کنید. هر خط، نشانگر یا متنی که اضافه میکنید، باید هدف مشخصی داشته باشد. دادههای اضافه، پسزمینههای شلوغ، یا تیکهای محور بیش از حد میتوانند خوانایی را کاهش دهند.
-
اندازه مناسب فونت و خطوط: فونتها باید به اندازه کافی بزرگ باشند تا در اندازههای مختلف (از مانیتور تا چاپ) خوانا باشند. خطوط نمودار و نشانگرها نیز باید به اندازه کافی ضخیم و متمایز باشند.
% مثال 27: نمودار با وضوح و خوانایی بالا
x = 0:0.05:5;
y_data = 3*exp(-0.5*x) .* sin(2*pi*x) + randn(size(x))*0.2;
y_fit = 3*exp(-0.5*x) .* sin(2*pi*x); % دادههای برازش شده/مدل
figure;
plot(x, y_data, 'o', 'MarkerSize', 4, 'MarkerFaceColor', [0.8 0.8 0.8], 'MarkerEdgeColor', [0.5 0.5 0.5], 'DisplayName', 'دادههای تجربی');
hold on;
plot(x, y_fit, 'r-', 'LineWidth', 2, 'DisplayName', 'مدل برازش شده');
hold off;
title({'پاسخ یک سیستم میرا شده', 'و مقایسه با مدل تئوری'}, 'FontSize', 16, 'FontWeight', 'bold');
xlabel('زمان (ثانیه)', 'FontSize', 14);
ylabel('دامنه سیگنال (واحد دلخواه)', 'FontSize', 14);
legend('Location', 'best', 'FontSize', 12);
grid on;
set(gca, 'FontSize', 12, 'FontName', 'Helvetica'); % تنظیم فونت و اندازه تیکها
box on; % افزودن کادر اطراف نمودار
استفاده از box on برای افزودن یک کادر اطراف نمودار نیز میتواند به زیبایی و تفکیک آن کمک کند.
انتخاب رنگ مناسب
رنگها نقش مهمی در بصریسازی دادهها دارند. انتخاب هوشمندانه رنگ میتواند اطلاعات اضافی را منتقل کند و خوانایی را افزایش دهد.
-
استفاده معنیدار از رنگها: رنگها باید معنایی داشته باشند. مثلاً میتوانید از رنگهای مختلف برای نمایش دستههای مختلف دادهها یا برای برجسته کردن دادههای مهم استفاده کنید.
-
پالتهای رنگی مناسب: برای دادههای پیوسته، از پالتهای رنگی گرادیانی (sequential colormaps) استفاده کنید (مثل `parula`, `viridis`). برای دادههای دستهبندی شده، از رنگهای متمایز و مجزا استفاده کنید.
-
دوستدار کوررنگی (Colorblind-friendly): سعی کنید از پالتهای رنگی استفاده کنید که برای افراد با کوررنگی نیز قابل تمایز باشند. متلب چندین نقشه رنگی کوررنگی-دوست (مانند `viridis`, `plasma`, `inferno`, `magma`) دارد.
-
کنتراست کافی: مطمئن شوید که رنگ متن و خطوط با رنگ پسزمینه کنتراست کافی دارند.
% مثال 28: استفاده از رنگهای کوررنگی-دوست
x = 1:10;
y_series1 = x;
y_series2 = 10 - x;
y_series3 = x.^0.5 * 3;
figure;
plot(x, y_series1, 'Color', [0.00, 0.45, 0.74], 'LineWidth', 2, 'DisplayName', 'سری 1'); % آبی
hold on;
plot(x, y_series2, 'Color', [0.85, 0.33, 0.10], 'LineWidth', 2, 'DisplayName', 'سری 2'); % نارنجی
plot(x, y_series3, 'Color', [0.49, 0.18, 0.56], 'LineWidth', 2, 'DisplayName', 'سری 3'); % بنفش
hold off;
title('نمودار با رنگهای متمایز');
xlabel('X');
ylabel('Y');
legend('show', 'Location', 'northeast');
grid on;
رنگهای RGB مشخص شده در این مثال، اغلب به عنوان رنگهای کوررنگی-دوست شناخته میشوند و در بسیاری از انتشارات علمی محبوب هستند.
بهینهسازی برای انتشار
اگر نمودارهای شما قرار است در مقالات علمی، پایاننامهها یا گزارشهای رسمی منتشر شوند، رعایت نکات زیر ضروری است:
-
فرمت برداری: همیشه نمودارها را در فرمتهای برداری (مانند PDF، EPS) ذخیره کنید. این فرمتها مقیاسپذیر هستند و در هر اندازه چاپی کیفیت خود را حفظ میکنند. برای انتشارات آنلاین، PNG با رزولوشن بالا (300dpi به بالا) نیز قابل قبول است.
-
فونتهای تعبیهشده: اطمینان حاصل کنید که فونتها در فایلهای برداری تعبیه شدهاند تا در هر سیستمی به درستی نمایش داده شوند. متلب به طور پیشفرض این کار را برای PDF و EPS انجام میدهد.
-
پسزمینه شفاف: در صورت نیاز، نمودارها را با پسزمینه شفاف (transparent background) ذخیره کنید، خصوصاً برای فرمتهای PNG، تا بتوانید آنها را به راحتی روی پسزمینههای مختلف قرار دهید (مثلاً در یک اسلاید پاورپوینت).
-
اندازه و ابعاد: ابعاد نمودار را متناسب با فضایی که در سند نهایی اشغال میکند تنظیم کنید. اغلب، یک نمودار کمی بزرگتر از حد نهایی در متلب طراحی میشود تا در زمان کوچک شدن، جزئیات آن همچنان واضح باقی بماند.
% مثال 29: خروجی گرفتن برای انتشار با پسزمینه شفاف
x = 0:0.1:pi;
y = sin(x);
fig = figure('Color', 'w'); % پس زمینه سفید برای پنجره
plot(x, y, 'LineWidth', 2, 'Color', [0 0.4470 0.7410]);
title('تابع سینوسی');
xlabel('X');
ylabel('Sin(X)');
grid on;
% ذخیره به عنوان PNG با پسزمینه شفاف
print(fig, 'sin_plot_transparent.png', '-dpng', '-r300', '-opengl', '-transparent');
پارامتر '-transparent' به print میگوید که پسزمینه را شفاف کند. '-opengl' رندرینگ را با استفاده از OpenGL انجام میدهد که میتواند به کیفیت کمک کند.
بهرهگیری از ابزارهای پیشرفتهتر (Object-Oriented Plotting)
متلب یک سیستم گرافیکی مبتنی بر اشیاء (Object-Oriented Graphics) دارد. هر عنصری در نمودار (شکل، محور، خط، عنوان، افسانه و غیره) یک شیء است که میتوانید با آن تعامل داشته باشید و ویژگیهایش را تغییر دهید. این کار با گرفتن "handle" شیء انجام میشود.
% مثال 30: سفارشیسازی با دستگیرههای اشیاء
x = 0:0.1:2*pi;
y = sin(x);
figure;
h_plot = plot(x, y); % دریافت دستگیره شیء خط
h_ax = gca; % دریافت دستگیره شیء محورهای فعلی
h_fig = gcf; % دریافت دستگیره شیء شکل فعلی
% تغییر ویژگیهای خط با استفاده از دستگیره
set(h_plot, 'Color', [0.9 0.4 0.1], 'LineWidth', 2.5, 'LineStyle', '--');
% تغییر ویژگیهای محورها
set(h_ax, 'XLim', [0 pi], 'YLim', [-1.2 1.2], ...
'FontName', 'Georgia', 'FontSize', 12, ...
'XGrid', 'on', 'YGrid', 'on', 'GridAlpha', 0.5); % GridAlpha شفافیت شبکه را کنترل میکند
% افزودن عنوان با دستگیره
h_title = title(h_ax, 'نمودار سینوسی سفارشی شده');
set(h_title, 'Color', 'blue', 'FontSize', 16, 'FontWeight', 'normal');
% اضافه کردن برچسب محور X با دستگیره
h_xlabel = xlabel(h_ax, 'زاویه (رادیان)');
set(h_xlabel, 'FontAngle', 'italic'); % فونت ایتالیک
% میتوانید ویژگیهای شکل را نیز تغییر دهید
set(h_fig, 'MenuBar', 'none', 'Toolbar', 'none'); % حذف منو و نوار ابزار
با استفاده از get(h, 'PropertyName') میتوانید ویژگیهای فعلی یک شیء را مشاهده کنید و با set(h, 'PropertyName', Value) آنها را تغییر دهید. این رویکرد به شما حداکثر انعطافپذیری را برای ایجاد نمودارهای بسیار دقیق و سفارشی میدهد.
با رعایت این بهترین شیوهها و استفاده هوشمندانه از قابلیتهای متلب، میتوانید نمودارهایی تولید کنید که نه تنها از نظر بصری جذاب هستند، بلکه به طور مؤثری داستان دادههای شما را روایت میکنند و به اعتبار کار شما میافزایند.
نتیجهگیری
تجسم دادهها یکی از ستونهای اصلی تحلیل داده در علوم و مهندسی است و متلب با مجموعه قدرتمند و جامع ابزارهای خود، این فرآیند را برای کاربران خود بینهایت ساده و در عین حال بسیار انعطافپذیر ساخته است. در این مقاله، ما یک مسیر جامع را از مبانی اولیه رسم نمودارهای خطی با تابع plot آغاز کردیم و گام به گام به سمت پیچیدگیهای بیشتر حرکت کردیم.
ما آموختیم چگونه با توابع پایه، نمودارهای خطی ساده را ایجاد کنیم و با افزودن عنوان، برچسب محورها و افسانه، آنها را قابل فهمتر سازیم. سپس به بررسی تکنیکهای پیشرفتهتر مانند رسم چندین نمودار در یک محور با hold on، استفاده از محور Y دوگانه با yyaxis برای مقایسه متغیرهای با مقیاسهای مختلف، و نمایش دادههای گسسته با stem و stairs پرداختیم. نمودارهای پراکندگی با تابع scatter امکان تجسم روابط پیچیده بین متغیرها و افزودن ابعاد اضافی با تغییر اندازه و رنگ نقاط را به ما نشان داد.
در ادامه، به نمودارهای تخصصی دو بعدی نظیر نمودارهای میلهای (bar) برای مقایسه دستهها، نمودارهای مساحت (area) برای نمایش روندهای انباشته، نمودارهای دایرهای (pie) برای نشان دادن سهم از کل، و هیستوگرامها (histogram) برای تحلیل توزیع دادهها پرداختیم. سازماندهی چندین نمودار در یک پنجره واحد با استفاده از subplot به عنوان یک ابزار حیاتی برای ارائه جامع تحلیلها معرفی شد.
در نهایت، به جنبههای عملیاتی و حیاتی ذخیره و خروجی گرفتن از نمودارها پرداختیم، جایی که انتخاب فرمت مناسب (برداری یا پیکسلی) و تنظیمات کیفیت برای انتشارات حرفهای مورد تأکید قرار گرفت. همچنین، بهترین شیوهها برای رسم نمودارهای حرفهای، شامل وضوح و خوانایی، انتخاب رنگ مناسب، بهینهسازی برای انتشار و بهرهگیری از قابلیتهای شیءگرای متلب، برای اطمینان از کیفیت و تأثیرگذاری بصری بالا مورد بحث قرار گرفت.
تسلط بر این ابزارها به شما این امکان را میدهد که دادههای خود را به شیوهای مؤثر و بصری گیرا ارائه دهید. هرچند متلب طیف وسیعی از قابلیتها را ارائه میدهد، اما یادگیری واقعی از طریق تمرین و آزمایش با دادههای خود شما حاصل میشود. با پیادهسازی کدهای ارائه شده در این مقاله و کاوش بیشتر در مستندات متلب، قادر خواهید بود تا مهارتهای تجسم دادههای خود را به سطح بالاتری ارتقا دهید و از قدرت بصریسازی برای کشف دانش جدید و انتقال پیامهای کلیدی بهرهبرداری کنید.
جهان دادهها در حال گسترش است و توانایی نمایش مؤثر آنها نه تنها یک مهارت فنی، بلکه یک هنر است. امیدواریم این راهنما به شما در تسلط بر این هنر در محیط متلب کمک شایانی کرده باشد.
“تسلط به برنامهنویسی پایتون با هوش مصنوعی: آموزش کدنویسی هوشمند با ChatGPT”
"تسلط به برنامهنویسی پایتون با هوش مصنوعی: آموزش کدنویسی هوشمند با ChatGPT"
"با شرکت در این دوره جامع و کاربردی، به راحتی مهارتهای برنامهنویسی پایتون را از سطح مبتدی تا پیشرفته با کمک هوش مصنوعی ChatGPT بیاموزید. این دوره، با بیش از 6 ساعت محتوای آموزشی، شما را قادر میسازد تا به سرعت الگوریتمهای پیچیده را درک کرده و اپلیکیشنهای هوشمند ایجاد کنید. مناسب برای تمامی سطوح با زیرنویس فارسی حرفهای و امکان دانلود و تماشای آنلاین."
ویژگیهای کلیدی:
بدون نیاز به تجربه قبلی برنامهنویسی
زیرنویس فارسی با ترجمه حرفهای
۳۰ ٪ تخفیف ویژه برای دانشجویان و دانش آموزان