<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
好久不見哈,今天帶來一個不咋炫酷但是比較實用的甘特圖繪製,就畫一堆矩形嘛非常簡單。
之所以這期工具函數放在最前面是因為比較短哈:
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:1 tid=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); 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',this.colorList(i,:),'AlignVertexCenters','on',varargin{:}); end for j=1:length(t_sT) if ~isempty(this.String) ganttHdl.(['t',num2str(i)])(j)=text(t_sT(j),i,t_Str{j}); else ganttHdl.(['t',num2str(i)])(j)=text(t_sT(j),i,''); end end 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);
就改當前座標區域的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)}; end GTC=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 end ax=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繪製甘特圖的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45