好久不见哈,今天带来一个不咋炫酷但是比较实用的甘特图绘制,就画一堆矩形嘛非常简单。


工具函数完整代码

之所以这期工具函数放在最前面是因为比较短哈:

function ganttHdl=ganttChart(sT,dT,id,varargin)
% sT | 任务开始时间
% dT | 任务持续时间
% id | 任务所属类型% @author : slandarer
% 公众号  : slandarer随笔
ax=gca;hold on;
ax.YTick=1:max(id);
ax.YLim=[0,max(id)+1];
sT=sT(:);dT=dT(:);id=id(:);% 基本配色表
this.colorList=[118 160 173;89 124 139;212 185 130;217 189 195;165 108 127;188 176 210]./255;
this.colorList=[this.colorList;rand(max(id),3).*.6+.4];% 获取其他属性
this.String='';
arginList={'String','ColorList'};
for i=(length(varargin)-1):-2:1tid=ismember(arginList,varargin{i});if any(tid)this.(arginList{tid})=varargin{i+1};varargin(i:i+1)=[];end
end% 循环绘图
for i=unique(id)'t_sT=sT(id==i);t_dT=dT(id==i);[t_sT,t_ind]=sort(t_sT);t_dT=t_dT(t_ind);if ~isempty(this.String)t_Str=this.String(id==i);t_Str=t_Str(t_ind);endfor 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',this.colorList(i,:),'AlignVertexCenters','on',varargin{:});endfor j=1:length(t_sT)if ~isempty(this.String)ganttHdl.(['t',num2str(i)])(j)=text(t_sT(j),i,t_Str{j});elseganttHdl.(['t',num2str(i)])(j)=text(t_sT(j),i,'');endend
end
end

使用方法

基本使用

设置任务开始时间,结束时间及任务编号后,调用工具函数绘图即可:

startT=[0 3 5 12 16,1.5 6 8 15 18,3 10 11 16 19,2 4 11 13 15,1 3 7 16 18,5 11 14 16 20];
durationT=[3 2 5 4 4,4 1 7 2 5,6 1 4 3 2,1 6 2 2 9,2 3 4 2 5,5 3 1 2 8];
jobId=[1 1 1 1 1,2 2 2 2 2,3 3 3 3 3,4 4 4 4 4,5 5 5 5 5,6 6 6 6 6];GTC=ganttChart(startT,durationT,jobId);

不咋好看的圆角

设置Curvature为0-1之间的数值即可:

GTC=ganttChart(startT,durationT,jobId,'Curvature',.8);

修改Y轴标签

就改当前坐标区域的YTickLabel属性即可,例如:

ax=gca;
ax.YTickLabel={'Process1','Process2','Process3','Process4','Process5','Process6'};

添加每个任务上的文本信息

调用工具函数的时候设置String属性即可,例如:

startT=[0 3 5 12 16,1.5 6 8 15 18,3 10 11 16 19,2 4 11 13 15,1 3 7 16 18,5 11 14 16 20];
durationT=[3 2 5 4 4,4 1 7 2 5,6 1 4 3 2,1 6 2 2 9,2 3 4 2 5,5 3 1 2 8];
jobId=[1 1 1 1 1,2 2 2 2 2,3 3 3 3 3,4 4 4 4 4,5 5 5 5 5,6 6 6 6 6];pName{length(jobId)}='';
for i=1:length(jobId)pName(i)={num2str(i)};
endGTC=ganttChart(startT,durationT,jobId,'String',pName);

当然可以更复杂些,包含一下每个任务的信息:

pName{length(jobId)}='';
for i=1:length(jobId)pName(i)={['[',num2str(startT(i)),',',num2str(startT(i)+durationT(i)),']']};
end

单独修改任务标签信息

实际上工具函数的返回值长这样:

GTC =
包含以下字段的 struct:
p1: [1×5 Rectangle]
t1: [1×5 Text]
p2: [1×5 Rectangle]
t2: [1×5 Text]
p3: [1×5 Rectangle]
t3: [1×5 Text]
p4: [1×5 Rectangle]
t4: [1×5 Text]
p5: [1×5 Rectangle]
t5: [1×5 Text]
p6: [1×5 Rectangle]
t6: [1×5 Text]

因此我们可以对每个矩形块或者每个文本单独修饰,例如:

startT=[0 3 5 12 16,1.5 6 8 15 18,3 10 11 16 19,2 4 11 13 15,1 3 7 16 18,5 11 14 16 20];
durationT=[3 2 5 4 4,4 1 7 2 5,6 1 4 3 2,1 6 2 2 9,2 3 4 2 5,5 3 1 2 8];
jobId=[1 1 1 1 1,2 2 2 2 2,3 3 3 3 3,4 4 4 4 4,5 5 5 5 5,6 6 6 6 6];GTC=ganttChart(startT,durationT,jobId);GTC.t1(2).String='slandarer';
GTC.t1(2).Color=[1,0,0];
GTC.t1(2).FontSize=25;

修改颜色

写个循环为每个矩形修改颜色,一个实例:

startT=[0 3 5 12 16,1.5 6 8 15 18,3 10 11 16 19,2 4 11 13 15,1 3 7 16 18,5 11 14 16 20];
durationT=[3 2 5 4 4,4 1 7 2 5,6 1 4 3 2,1 6 2 2 9,2 3 4 2 5,5 3 1 2 8];
jobId=[1 1 1 1 1,2 2 2 2 2,3 3 3 3 3,4 4 4 4 4,5 5 5 5 5,6 6 6 6 6];GTC=ganttChart(startT,durationT,jobId);
colorList=[204,154,129;222,191,170;185,184,163;165,165,139;107,112,92]./255;for i=1:max(jobId)tHdl=GTC.(['p',num2str(i)]);for j=1:length(tHdl)set(tHdl(j),'FaceColor',colorList(j,:))end
end

此处使用阿昆的科研日常 No.11配色

另一个实例:

startT=[0 3 5 12 16,1.5 6 8 15 18,3 10 11 16 19,2 4 11 13 15,1 3 7 16 18,5 11 14 16 20];
durationT=[3 2 5 4 4,4 1 7 2 5,6 1 4 3 2,1 6 2 2 9,2 3 4 2 5,5 3 1 2 8];
jobId=[1 1 1 1 1,2 2 2 2 2,3 3 3 3 3,4 4 4 4 4,5 5 5 5 5,6 6 6 6 6];GTC=ganttChart(startT,durationT,jobId);
colorList=[165 108 127;165 108 127;89 124 139;89 124 139;212 185 130;212 185 130]./255;for i=1:max(jobId)tHdl=GTC.(['p',num2str(i)]);for j=1:length(tHdl)set(tHdl(j),'FaceColor',colorList(i,:))end
endax=gca;
ax.YTickLabel={'S-1-1','S-1-2','S-2-1','S-2-2','S-3-1','S-3-2'};


实际上默认配色只有前六组是固定的,更多组是随机的,可以多画几组试试看:

startT=[0 3 5 12 16,1.5 6 8 15 18,3 10 11 16 19,2 4 11 13 15,1 3 7 16 18,5 11 14 16 20,0 3 5 12 16,1.5 6 8 15 18];
durationT=[3 2 5 4 4,4 1 7 2 5,6 1 4 3 2,1 6 2 2 9,2 3 4 2 5,5 3 1 2 8,3 2 5 4 4,4 1 7 2 5];
jobId=[1 1 1 1 1,2 2 2 2 2,3 3 3 3 3,4 4 4 4 4,5 5 5 5 5,6 6 6 6 6,7 7 7 7 7,8 8 8 8 8];GTC=ganttChart(startT,durationT,jobId);

MATLAB | 如何使用MATLAB绘制甘特图(gantt chart)相关推荐

  1. 甘特图(Gantt Chart)绘制方法

    给大家介绍下甘特图(Gantt Chart) 及其绘制方法,主要内容如下: 甘特图(Gantt Chart) 的简单介绍 甘特图(Gantt Chart) 绘制方法(R+Python) 甘特图(Gan ...

  2. 甘特图(Gantt Chart)画法1.Excel;2.Edraw Project

    建议使用Edraw Project画甘特图,缺点是收费软件. 一.Excel画甘特图 1.在excel中建数据: 任务 开始时间 结束时间 耗时(h) 需求评审 2019/11/1 2019/11/5 ...

  3. Excel甘特图 Gantt Chart

    基于Excel开发的甘特图,保留Excel的功能,单元格可嵌入各种公式,设置字体,颜色,背景 不需要Projector,比Projector更简单易用 具备节点标记,今日显示,大项任务突出显示,进度标 ...

  4. R语言可视化包ggplot2绘制甘特图(gantt chart)实战

    R语言可视化包ggplot2绘制甘特图(gantt chart)实战 目录 R语言可视化包ggplot2绘制甘特图(gantt chart)实战 #仿真数据

  5. matlab半小提琴图,数据可视化——Matlab平台matlab-barplot工具箱绘制小提琴图

    数据可视化--Matlab平台matlab-barplot工具箱绘制小提琴图 概述:基于matlab平台的matlab-barplot工具箱绘制小提琴图 小提琴图(violin plot)可以理解为另 ...

  6. 如何使用Excel绘制甘特图

    甘特图含义: 甘特图(Gantt chart)又称为横道图.条状图(Bar chart).其通过条状图来显示项目,进度,和其他时间相关的系统进展的内在关系随着时间进展的情况.以提出者亨利·L·甘特(H ...

  7. Markdown绘制甘特图教程

    日常工作中多个项目并行推进时,很难描述清楚每个任务的进度,以及当前状态.之前也想过用甘特图来管理项目进度,但是绘制甘特图的成本太高,而且不容易掌握.很难在团队中推广普及. 最近在使用Markdown排 ...

  8. html 绘制甘特图,基于JS简单甘特图

    最近同事求助到一个小小的需求,写一个时间甘特图,主要想表现一个车在一天的不同的时间点里,停靠的站点, 先来看一下效果吧,这里的需求是从早上的5点为开始时间,到第二天到凌晨5点 前期准备 其实网上有很多 ...

  9. html 绘制甘特图,Markdown绘制甘特图教程

    日常工作中多个项目并行推进时,很难描述清楚每个任务的进度,以及当前状态.之前也想过用甘特图来管理项目进度,但是绘制甘特图的成本太高,而且不容易掌握.很难在团队中推广普及. 最近在使用Markdown排 ...

最新文章

  1. 新书来了!《ActionScript 3.0游戏设计基础(第2版)》
  2. JMeter Sampler之BeanShellSampler的使用
  3. Asp.net 操作cookie大全
  4. 111 第一章操作系统概述总结思维导图+错题整理
  5. java kafka 消费_java编程之Kafka_消费者API详解
  6. hdu 4277 USACO ORZ
  7. 部署zookeeper分布式节点
  8. 信息学奥赛一本通 1967:【14NOIP普及组】螺旋矩阵 | 洛谷 P2239 [NOIP2014 普及组] 螺旋矩阵
  9. 还不会python面相对象?活该单身(面向对象基础+交互关系)
  10. 大道至简,职场上做人做事做管理(From Jimmy Zhang)
  11. Web存储—sessionStorage存储
  12. Count on a tree SPOJ - COT
  13. zb_system login.php,zblog后台登录地址怎么修改?
  14. python画图——雪花(科赫曲线)
  15. 模拟停车场管理系统(栈和队列的应用)
  16. python爬取js_Python爬取javascript(js)动态网页
  17. 索骥馆-走向世界之《用美国小孩的方法学英文动词》扫描版[PDF]
  18. Sharding-JDBC(一)SpringBoot集成
  19. 快速上手TiDB,体验全新的一栈式实时HTAP数据库
  20. matlab 中@的用法

热门文章

  1. 【C++】Win10设置默认程序
  2. 工业互联网的数据集成
  3. 三种近距离通信技术(WIFI、蓝牙、NFC)简述
  4. java集合框架学习笔记
  5. 根据身份证号,获取指定格式出生年月日
  6. 关于U盘文件消失,但是内存还在的情况。
  7. 设置苹果手机的生日提醒
  8. 常用显卡驱动下载合集
  9. 中断工作原理在现代计算机中的应用,中断、DMA、通道
  10. RTL8211F 硬件配置