最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用Matlab繪制甘特圖的方法詳解

 更新時(shí)間:2022年10月23日 10:18:23   作者:slandarer  
這篇文章主要為大家詳細(xì)介紹了如何利用Matlab實(shí)現(xiàn)甘特圖(gantt?chart)的繪制,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Matlab有一定幫助,需要的可以參考一下

前言

好久不見哈,今天帶來一個(gè)不咋炫酷但是比較實(shí)用的甘特圖繪制,就畫一堆矩形嘛非常簡(jiǎn)單。

工具函數(shù)完整代碼

之所以這期工具函數(shù)放在最前面是因?yàn)楸容^短哈:

function ganttHdl=ganttChart(sT,dT,id,varargin)
% sT | 任務(wù)開始時(shí)間
% dT | 任務(wù)持續(xù)時(shí)間
% id | 任務(wù)所屬類型

% @author : slandarer
% 公眾號(hào)  : 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


% 循環(huán)繪圖
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

使用方法

基本使用

設(shè)置任務(wù)開始時(shí)間,結(jié)束時(shí)間及任務(wù)編號(hào)后,調(diào)用工具函數(shù)繪圖即可:

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);

不咋好看的圓角

設(shè)置Curvature為0-1之間的數(shù)值即可:

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

修改Y軸標(biāo)簽

就改當(dāng)前坐標(biāo)區(qū)域的YTickLabel屬性即可,例如:

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

添加每個(gè)任務(wù)上的文本信息

調(diào)用工具函數(shù)的時(shí)候設(shè)置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);

當(dāng)然可以更復(fù)雜些,包含一下每個(gè)任務(wù)的信息:

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

單獨(dú)修改任務(wù)標(biāo)簽信息

實(shí)際上工具函數(shù)的返回值長(zhǎng)這樣:

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]

因此我們可以對(duì)每個(gè)矩形塊或者每個(gè)文本單獨(dú)修飾,例如:

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;

修改顏色

寫個(gè)循環(huán)為每個(gè)矩形修改顏色,一個(gè)實(shí)例:

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配色

另一個(gè)實(shí)例:

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'};

實(shí)際上默認(rèn)配色只有前六組是固定的,更多組是隨機(jī)的,可以多畫幾組試試看:

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繪制甘特圖的方法詳解的詳細(xì)內(nèi)容,更多關(guān)于Matlab繪制甘特圖的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 70行C語(yǔ)言代碼實(shí)現(xiàn)貪吃蛇

    70行C語(yǔ)言代碼實(shí)現(xiàn)貪吃蛇

    這篇文章主要為大家詳細(xì)介紹了70行C語(yǔ)言代碼實(shí)現(xiàn)貪吃蛇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 詳解C語(yǔ)言中Char型指針數(shù)組與字符數(shù)組的區(qū)別

    詳解C語(yǔ)言中Char型指針數(shù)組與字符數(shù)組的區(qū)別

    這篇文章主要介紹了詳解C語(yǔ)言中Char型指針數(shù)組與字符數(shù)組的區(qū)別的相關(guān)資料,希望通過本文能幫助到大家掌握理解這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • 使用C語(yǔ)言順序表數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)棧的代碼示例

    使用C語(yǔ)言順序表數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)棧的代碼示例

    這篇文章主要給大家介紹了如何使用C語(yǔ)言順序表數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)棧,文章通過代碼示例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的參考價(jià)值,需要的朋友可以參考下
    2023-09-09
  • string與char*轉(zhuǎn)換的使用詳解

    string與char*轉(zhuǎn)換的使用詳解

    本篇文章對(duì)string與char*的轉(zhuǎn)換進(jìn)行的介紹。需要的朋友參考下
    2013-05-05
  • C語(yǔ)言中main函數(shù)與命令行參數(shù)詳細(xì)講解

    C語(yǔ)言中main函數(shù)與命令行參數(shù)詳細(xì)講解

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言main()函數(shù)與命令行參數(shù)問題,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-04-04
  • C++共享智能指針shared_ptr的實(shí)現(xiàn)

    C++共享智能指針shared_ptr的實(shí)現(xiàn)

    在C++中沒有垃圾回收機(jī)制,必須自己釋放分配的內(nèi)存,否則就會(huì)造成內(nèi)存泄露,解決這個(gè)問題最有效的方法是使用智能指針,本文主要介紹了C++共享智能指針shared_ptr的實(shí)現(xiàn),感興趣的可以了解一下
    2023-12-12
  • C++類的繼承和派生及指針安全引用

    C++類的繼承和派生及指針安全引用

    這篇文章主要介紹了C++類的繼承和派生及指針安全引用,繼承指從現(xiàn)有類獲得其特性,派生指從已有類產(chǎn)生新的類,指針和引用并存,二者似乎有很多相同點(diǎn),但是又不完全相同,下面關(guān)于兩者的相關(guān)資料,需要的小伙伴可以參考一下
    2022-03-03
  • 理解C++編程中的std::function函數(shù)封裝

    理解C++編程中的std::function函數(shù)封裝

    這篇文章主要介紹了理解C++編程中的std::function函數(shù)封裝,std::function是C++11標(biāo)準(zhǔn)中的新特性,需要的朋友可以參考下
    2016-04-04
  • C++11的for循環(huán)的新用法(推薦)

    C++11的for循環(huán)的新用法(推薦)

    C++11這次的更新帶來了令很多C++程序員期待已久的for range循環(huán),每次看到j(luò)avascript, lua里的for range,心想要是C++能有多好,心里別提多酸了。這次C++11不負(fù)眾望,再也不用羨慕別家人的for range了。下面看下C++11的for循環(huán)的新用法
    2021-11-11
  • C++ 迭代器失效問題解決

    C++ 迭代器失效問題解決

    在C++中,當(dāng)一個(gè)vector進(jìn)行了插入或刪除操作時(shí),其迭代器可能會(huì)失效,本文就來介紹一下C++ 迭代器失效問題解決,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01

最新評(píng)論

渝中区| 湟中县| 东兴市| 东乌珠穆沁旗| 鄯善县| 扬州市| 南平市| 肇州县| 泽州县| 靖州| 中西区| 任丘市| 靖州| 鹰潭市| 饶阳县| 鱼台县| 蛟河市| 项城市| 鹤庆县| 牟定县| 乐昌市| 织金县| 晋宁县| 定日县| 佛学| 郯城县| 石台县| 武隆县| 华池县| 塘沽区| 公主岭市| 杨浦区| 浮梁县| 新民市| 开化县| 泊头市| 丹巴县| 宜城市| 孟连| 永寿县| 定兴县|