MATLAB甘特图代码(车间调度)

文章介绍了如何在Matlab中通过main.m和ganttChart.m函数绘制甘特图,以时间轴和机器编号为维度,展示了任务开始、结束时间和执行机器等信息,特别提到当横纵轴名称为中文时的显示问题及其解决方法。
摘要由CSDN通过智能技术生成

说明:

直接运行main.m即可画出甘特图,横轴为时间轴,纵轴为机器编号
每个方块中依次为:工件编号 工序编号 任务开始时刻 任务完成时刻

ps:1. 数据为模拟,不符合实际
2. 如果横轴和纵轴名称为中文,出现无法显示的问题,见“补充说明”
3. 任务调度的甘特图代码可见另一篇博文

运行效果:

![在这里插入图片描述](https://img-blog.csdnimg.cn/b0c1210948ac40d2a53b3a48d9c8fce0.png

main.m代码

ganttData = {
    % 第一行表示 任务开始时间
    [10   120   205   320   400   10    70   150   230   295   400    510    60   170   250   330   410   490    30   130   230   310   380   480    20   110   220   260   380   460;]
    % 第二行表示  任务结束时间
    [80   185   265   380   470   60    120   200   250   390   500   550   120   200   290   360   475   560   100   200   300   360   460   540    80   200   240   340   420   520;]
    % 第三行表示 执行该任务的机器编号
    [1     1     1     1     1    2      2     2     2     2     2    2      3     3     3     3     3     3     4     4     4     4     4     4     5     5     5     5     5    5  ;]
    % 第四行表示 工件编号
     [1     1     1     1     1    2      2     2     2     2     2    2      3     3     3     3     3     3     4     4     4     4     4     4     5     5     5     5     5    5  ;]
    % 第五行表示 工件的工序
     [1     1     1     1     1    2      2     2     2     2     2    2      3     3     3     3     3     3     4     4     4     4     4     4     5     5     5     5     5    5  ;]
};
% 以第一列为例, 表示1号工件的1号工序在机器1上执行,开始执行时间为10,结束执行时间为80
% 画图,'Time','Machine'分别为横轴和纵轴名称
GTC=ganttChart(ganttData,'Time','Machine');

ganttChart.m代码

function ganttHdl=ganttChart(ganttData,xLabelName,YLabelName)
% sT | 任务开始时间
% eT | 任务结束时间
% machineId | 任务所属机器编号
% taskId | 任务编号
hold on;

% 数据预处理
sT = ganttData{1, :};
eT = ganttData{2, :};
machineId = ganttData{3, :};
taskId = ganttData{4, :};
processId = ganttData{5, :};
display(taskId)
% 根据任务开始时间和结束时间计算 任务的持续时长
for ii=1:1:size(sT,2)
    dT(ii)=eT(ii)-sT(ii);
end

% 获取甘特图每个方块中的数据
rectangleData{length(machineId)}='';
for i=1:length(machineId)
    rectangleData(i)={[num2str(taskId(i)),'  ',num2str(processId(i)),'  ',num2str(sT(i)),'  ',num2str(eT(i))]};
end

% 将 Y 轴刻度设置为从 1 到 max(id) 的整数
set(gca,'YTick',1:max(machineId));
% 将 Y 轴限制设置为从 0 到 max(id)+1
set(gca,'YLim',[0,max(machineId)+1]);
% 关闭X轴网格,开启需设置为 on
set(gca,'XGrid','off');
% 关闭Y轴网格,开启需设置为 on
set(gca,'YGrid','off');
% 设置网格线透明度,网格线关闭时不起作用
set(gca,'GridAlpha',0.5);
% 设置网格线颜色,网格线关闭时不起作用
set(gca,'GridColor',[0.5 0.5 0.5]);
% 设置背景色为白色
set(gcf,'color','w');
% 设置字体,包括大小,字体,线宽
set(gca,'FontSize',20,'fontname','Times New Roman','Linewidth', 1.2);
sT=sT(:);dT=dT(:);machineId=machineId(:);
box('on');
% 设置x和y轴 名称
xlabel(xLabelName);
ylabel(YLabelName);
% 颜色列表
colorList = [
    255, 182, 193;   % 浅粉红
    173, 216, 230;   % 淡蓝色
    144, 238, 144;   % 淡绿色
    255, 228, 181;   % 淡黄色
    255, 248, 220;   % 淡紫色
    224, 255, 255;   % 淡青色
    255, 192, 203;   % 淡粉红
    240, 128, 128;   % 淡珊瑚
    152, 251, 152;   % 淡绿宝石
    255, 160, 122;   % 淡珊瑚
    221, 160, 221;   % 淡紫红
    173, 216, 230;   % 淡天蓝
    255, 165, 0;     % 淡橙色
    255, 222, 173;   % 浅杏仁
    192, 192, 192;   % 淡灰色
    255, 255, 255;   % 白色
    220, 220, 220;   % 淡灰色
    255, 228, 181;   % 淡橙色
    240, 230, 140;   % 淡黄绿色
    255, 215, 0      % 金黄色
    ] ./ 255;  % 将 RGB 值映射到 [0, 1] 范围

% 循环绘图
for i=unique(machineId)'
    t_sT=sT(machineId==i);
    t_dT=dT(machineId==i);
    [t_sT,t_ind]=sort(t_sT);
    t_dT=t_dT(t_ind);
    if ~isempty(rectangleData)
        t_Str=rectangleData(machineId==i);
        t_Str=t_Str(t_ind);
    end
    for j=1:length(t_sT)
        ganttHdl.(['p',num2str(i)])(j)=rectangle('Position',[t_sT(j),i-.4,t_dT(j),.8],...
            'LineWidth',.8,'EdgeColor',[.2,.2,.2],...
            'FaceColor',colorList(i+2,:),'AlignVertexCenters','on');
    end
    for j=1:length(t_sT)
        if ~isempty(rectangleData)
            ganttHdl.(['t',num2str(i)])(j)=text((t_sT(j)+t_dT(j)+t_sT(j))/2,i,t_Str{j},'FontSize', 15, 'fontname','Times New Roman', 'HorizontalAlignment', 'center');
        else
            ganttHdl.(['t',num2str(i)])(j)=text(t_sT(j),i,'');
        end
    end
end
end


补充说明

如果横轴和纵轴名称为中文的时候,出现无法显示的情况,可按照下图操作:
第一步,在图片显示界面点击 工具->编辑图形
在这里插入图片描述

第二步,选中名称,点击右键,选择“字型”
在这里插入图片描述

第三步,将字体选择为“宋体”即可
在这里插入图片描述

Matlab车间调度甘特图是一种用于可视化车间调度问题的工具。它可以帮助用户更好地理解和规划车间调度过程。下面是介绍Matlab车间调度甘特图的几个方面: 1. 什么是车间调度甘特图车间调度甘特图是一种图表,用于显示车间中各个任务的开始时间、结束时间和持续时间。它以时间为横,任务为纵轴,通过条形图的方式展示任务的时间安排,使用户可以清晰地了解任务之间的关系和时间分配情况。 2. Matlab中如何绘制车间调度甘特图? 在Matlab中,可以使用plot函数或者bar函数来绘制车间调度甘特图。首先,需要确定任务的开始时间、结束时间和持续时间,并将其转化为合适的数据格式。然后,使用plot函数或者bar函数将任务的时间信息以条形图的形式展示出来。 3. 车间调度甘特图的应用场景有哪些? 车间调度甘特图可以应用于各种车间调度问题,例如生产线上的任务安排、机器设备的维护计划等。它可以帮助用户合理安排任务的时间,优化生产效率,提高资源利用率。 4. 如何解读车间调度甘特图? 在车间调度甘特图中,每个任务的条形图表示该任务的时间安排。任务的开始时间和结束时间可以通过条形图的位置和长度来确定。用户可以根据任务的时间信息,判断任务之间的先后顺序、重叠情况以及整体的时间分配情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝灰鼓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值