如何利用matlab矩阵绘图?

您所在的位置:网站首页 matlab画不同的图 如何利用matlab矩阵绘图?

如何利用matlab矩阵绘图?

2023-03-13 23:43| 来源: 网络整理| 查看: 265

工序调度优化相关的问题需要绘制甘特图来表示优化的结果,今天主要是介绍绘制甘特图的自定义函数,同时也收集了网上一些相关的程序。

1.绘制甘特图的自定义函数

主程序

clc;%除命令行窗口命令 clear all;%清除工作区变量 close all;%关闭图形窗口 max_time = 160;%最大完工时间 max_tap = 10;%总间隔 total_task = 10;%总任务数 start_time =[13 104 89 1 5 54 43 91 95 1];%每个任务起始时间 persist_time = [41 19 6 12 37 34 48 10 56 3];%每个任务持续时间 id =[2 10 3 2 6 2 7 7 3 5]; %每个任务编号 纵轴的位置 gante(total_task,start_time,persist_time,id )%调用自定义函数

甘特图自定义函数 gante.m

function gante(total_task,start_time,persist_time,id ) %% 函数功能 绘制甘特图 %作者:风云龙 2022年10月11日 %参考内容:CSDN作者HowardGe的文章《Matlab 画甘特图》 %参考文章链接为https://blog.csdn.net/howardge/article/details/24147657 %% 函数输入: %total_task 任务总数 %start_time 任务开始时间 %persist_time 任务持续时间 %% 函数输出:生成多种格式的甘特图 图片 s = rng;%初始化随机数 %id 任务编号 rec=[0,0,0,0];%每个矩形的初始化值 四个顶点的值 %绘制调度图 for i =1:total_task color = rand(total_task,3); %生成随机数颜色 %矩形的四个顶点 rec(1) = start_time(i); rec(2) = id (i); rec(3) = persist_time(i); rec(4) = 1; rectangle('Position',rec,'LineWidth',2,'LineStyle','-.','FaceColor',color(i,:));%画每个矩形窗口 % rectangle函数创建带有尖角或圆角的矩形 text((start_time(i)+persist_time(i)/3),(id(i)+0.5),['t',int2str(i)]);%每个任务的编号 end box on;%设置外框 grid on;%绘制网格 xlabel('time/hour');%设置横坐标 ylim([1 total_task+2]);%设置纵坐标 set(gca,'FontName','Times New Roman','FontSize',12);%修改字体为古罗马 %自动保存生成的图片 formats = {'bmp','emf','pbm','pdf','pgm','png','ppm','tiff','fig','eps','svg'} ;%用元胞类型存储 图片类型 filename = 'gante_figure';%文件名称 for i = 1:length(formats) saveas(gcf,filename,formats{1,i});%保存 end end

绘制结果

2.其他绘制甘特图程序程序1%fileName:mt06_final.mt06 %fileDescription:create a Gantt chart whith the data given %creator:by mnmlist %Version:1.0 %last edit time:06-05-2015 clc; clear all; close all; axis([0,56,0,6.5]);%x轴 y轴的范围 set(gca,'xtick',0:2:56) ;%x轴的增长幅度 set(gca,'ytick',0:1:6.5) ;%y轴的增长幅度 xlabel('加工时间'),ylabel('机器号');%x轴 y轴的名称 title('mt06 的一个最佳调度(最短完工时间为55)');%图形的标题 n_bay_nb=6;%total bays //机器数目 n_task_nb = 36;%total tasks //任务数目 %x轴 对应于画图位置的起始坐标x n_start_time=[0 1 0 8 8 13 6 10 13 1 16 13 22 13 22 25 18 27 25 19 28 31 28 31 38 30 38 42 45 38 48 45 49 49 48 52];%start time of every task //每个工序的开始时间 %length 对应于每个图形在x轴方向的长度 n_duration_time =[1 5 8 5 5 3 4 8 10 3 3 9 3 5 5 6 9 3 5 9 10 1 10 7 4 8 10 3 9 7 3 4 6 1 4 1];%duration time of every task //每个工序的持续时间 %y轴 对应于画图位置的起始坐标y n_bay_start=[2 2 1 1 2 1 3 5 4 0 3 2 1 0 2 1 0 3 4 5 0 1 5 3 5 4 0 5 5 4 0 4 4 2 3 3]; %bay id of every task ==工序数目,即在哪一行画线 %工序号,可以根据工序号选择使用哪一种颜色 n_job_id=[0 2 1 3 1 5 2 2 1 0 5 4 4 3 3 0 2 3 4 5 5 2 1 0 4 3 1 0 3 2 4 5 0 5 1 4];% rec=[0,0,0,0];%temp data space for every rectangle color=['r','g','b','c','m','y']; for i =1:n_task_nb rec(1) = n_start_time(i);%矩形的横坐标 rec(2) = n_bay_start(i)+0.7; %矩形的纵坐标 rec(3) = n_duration_time(i); %矩形的x轴方向的长度 rec(4) = 0.6; txt=sprintf('p(%d,%d)=%d',n_bay_start(i)+1,n_job_id(i)+1,n_duration_time(i));%将机器号,工序号,加工时间连城字符串 rectangle('Position',rec,'LineWidth',0.5,'LineStyle','-','FaceColor',color(n_job_id(i)+1));%draw every rectangle text(n_start_time(i)+0.2,(n_bay_start(i)+1),txt,'FontWeight','Bold','FontSize',18);%label the id of every task ,字体的坐标和其它特性 end % ———————————————— % 版权声明:本文为CSDN博主「mnmlist_tata」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 % 原文链接:https://blog.csdn.net/mnmlist/article/details/45744539

运行结果

程序2clc; clear all; close all; %机器 任务 时间1 时间2 属性 a={1 '#3 (25,000)' 0 100 3; 1 '#4 (24,000)' 100 196 4; 1 '#8 (24,000)' 196 372 8; 2 '#1 (16,000)' 0 48 1; 2 '#2 (26,000):' 48 126 2; 2 '#11 (82,300)' 126 372 11; 3 '#5 (15,000)' 0 60 5; 3 '#4 (17,000)' 60 128 4; 3 '#6 (18,000)' 128 200 6; 3 '#10 (43,055)' 200 372 10; 4 '#7 (22,000)' 0 35 7; 4 '#8 (103,000)' 35 200 8; 4 '#9 (107,638)' 200 372 9;}; xlabels = string({"0","50","100","150","200","250","300","350"}); ylabels = string({"DS1","DS2","DS3","DS4"});%num2str((1:max(a(:,1)))','DS%d'); h=figure(1); clf; w=0.5; set(gcf,'color','w'); %配色方案 colors = {[51,204,255]/255; [255,255,0]/255; [51,204,102]/255; [51,255,204]/255; [255,255,153]/255; [219,186,119]/255; [204,255,255]/255; [102,255,51]/255; [255,204,0]/255; [102,153,255]/255; [153,204,51]/255;}; for ii=1:size(a,1) % 利用颜色区分所装的原油类型 x=cell2mat({a{ii,[3 3 4 4]}}); y=a{ii,1}+[-w/2 w/2 w/2 -w/2]; p=patch('xdata',x,'ydata',y,'facecolor',[1 1 1],'LineWidth',1.5); %这里[1,1,1]可以用上面的颜色代替,以标识不同的颜色 text(a{ii,3}+0.5,a{ii,1},a{ii,2},'FontSize',9); end set(gca,'Box','on'); set(gca,'XTick',0:50:350); set(gca,'YTick',0:max(cell2mat({a{:,1}}))); set(gca,'XTickLabel',xlabels); set(gca,'YTickLabel',['',ylabels,'']); % 设置宽高 set(gcf,'position',[500,300,1000,250]); box off; annotation1 = annotation(h,'arrow',[0.131 0.131],[0.92 0.96]); annotation2 = annotation(h,'arrow',[0.88 0.91],[0.11 0.11]); % 设置坐标轴字体大小 set(gca,'FontName','Times New Roman','FontSize',12,'LineWidth',1.5); axis([0 400 0 5]); % ———————————————— % 版权声明:本文为CSDN博主「CallMeJacky」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 % 原文链接:https://blog.csdn.net/zyxhangiian123456789/article/details/105490650

程序运行结果

程序3clc; clear all; close all; %% 矩形里的数字是任务编号,纵坐标是资源,横坐标是工期 data=[ 0 3 0 6 2; %x范围 y范围 编号 3 8 0 7 4; 3 9 7 9 5; 8 14 0 2 6; 9 11 2 7 7 12 13 2 9 3 13 17 2 8 8 17 19 0 2 9]; x=data(:,[1 1 2 2])'; y=data(:,[3 4 4 3])'; %抽出data第一行看 %data(1,[1 1 2 2])=[0 0 3 3] %data(1,[3 4 4 3])=[0 6 6 0] %表示(0,0)-(0,6)-(3,6)-(3,0)四点组成的矩形 %用patch就可以画出这个矩形 %不过patch要求每一列画一个多边形,所以最后要转置 cla; patch('xdata',x,'ydata',y,... %根据x,y画框框 'facecolor','none','edgecolor','k');%框框面和边的颜色 xl=(data(:,1)+data(:,2))/2;%x的平均值作为标记的x坐标 yl=(data(:,3)+data(:,4))/2;%y的平局值作为标记的y坐标 label=num2str(data(:,5));%data的第5列转为字符,作为标记内容 text(xl,yl,label);%显示标记 %https://zhidao.baidu.com/question/1947285617765777428

运行结果

程序4clc; clear all; close all; axis([0,18,0,3.5]); %x轴 y轴的范围 set(gca,'xtick',0:2:18) ; %x轴的增长幅度 set(gca,'ytick',0:1:3.5) ; %y轴的增长幅度 xlabel('加工时间','FontName','微软雅黑','Color','b','FontSize',16) ylabel('机器号','FontName','微软雅黑','Color','b','FontSize',16,'Rotation',90) title('P16示例(最短完工时间为16)','fontname','微软雅黑','Color','b','FontSize',16); taskNum = 9; %任务数目 macStartTime = [0 3 5 0 5 8 3 8 13]; %各工序开始时间 macDurationTime = [3 2 4 3 3 3 3 5 3]; %各工序持续时间 macInfo = [0 0 0 1 1 1 2 2 2]; %在哪台机器上进行绘制,对应于y坐标,M1=0,M2=1…以此类推 jobId = [1 0 2 2 0 1 1 0 2]; %工件号,用于颜色索引,J1=0,J2=1…以此类推 oper=[1 1 2 1 2 3 2 3 3]; %第几道工序 rec = [0,0,0,0]; color = [0.8,0.8,0; 0,1,0.8; 0,0.8,1; ]; for i = 1 : taskNum rec(1) = macStartTime(i); %矩形的横坐标 rec(2) = macInfo(i)+0.7; %矩形的纵坐标 rec(3) = macDurationTime(i); %矩形的x轴方向的长度 rec(4) = 0.6; %矩形高度 txt = sprintf('J%d.%d',jobId(i)+1,oper(i)); rectangle('Position',rec,'LineWidth',0.5,'LineStyle','-','FaceColor',[color(jobId(i)+1,1),color(jobId(i)+1,2),color(jobId(i)+1,3)]);%draw every rectangle [1,1,1]表示全白色 text(macStartTime(i)+0.2,(macInfo(i)+1),txt,'FontWeight','Bold','FontSize',16);%label the id of every task ,字体的坐标和其它特性 end set(gca, 'YTickLabel', {'0', 'M_{1}', 'M_{2}', 'M_{3}'}); % ———————————————— % 版权声明:本文为CSDN博主「谢师傅season」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 % 原文链接:https://blog.csdn.net/weixin_43840701/article/details/107092800

运行结果

程序5clc; clear all; close all; %% 基础设置 axis([0, 20, 0, 5.5]); set(gca, 'xtick', 0 : 1 : 20); set(gca, 'ytick', 0 : 1 : 10.5); xlabel('购买年与结投年'), ylabel('证券种类'); title('证券投资年份'); Number_securities = 15; Number_task = 15; %% 对应坐标 X_start_time = [1 11 10 1 5 16 1 16 5 1 17 4 1 18 3]; X_duration_time = [10 2 10 4 2 4 15 2 15 16 2 16 17 2 17]; Y_start_time = [1 1 2 3 3 4 5 5 6 7 7 8 9 9 10]; N_job_id = [1 1 1 2 2 2 3 3 3 4 4 4 5 5 5]; rec = [0 0 0 0 ]; color=['r','g','b','c','m']; %% 绘图 for i = 1 : Number_securities rec(1) = X_start_time(i); rec(2) = Y_start_time(i) + 0.7; rec(3) = X_duration_time(i); rec(4) = 0.6; txt=sprintf('(%d,%d)', N_job_id(i)+1, X_duration_time(i)); rectangle('Position',rec,'LineWidth',0.5,'LineStyle','-'); text(X_start_time(i)+0.2,(Y_start_time(i)+1),txt,'FontWeight','Bold','FontSize',18); end % ———————————————— % 版权声明:本文为CSDN博主「天威难测」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 % 原文链接:https://blog.csdn.net/m0_53347750/article/details/123295425

运行结果

参考内容

[1] CSDN博主HowardGe的文章《Matlab 画甘特图》,文章链接为:https://blog.csdn.net/howardge/article/details/24147657

[2] CSDN博主mnmlist_tata的文章《matlab画甘特图》,文章链接为:

https://blog.csdn.net/mnmlist/article/details/45744539

[3] CSDN博主CallMeJacky的文章《【Matlab】简单甘特图绘制》,文章链接为:

https://blog.csdn.net/zyxhangiian123456789/article/details/105490650

[4] 百度知道答主dukinkin的回答,文章链接为;

https://zhidao.baidu.com/question/1947285617765777428

[5] CSDN博主谢师傅season的文章《matlab画调度甘特图》,文章链接为:

https://blog.csdn.net/weixin_43840701/article/details/107092800

作 者 | 郭志龙编 辑 | 郭志龙校 对 | 郭志龙

本文内容来源于网络,仅供参考学习,如内容、图片有任何版权问题,请联系处理,24小时内删除。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3