<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          什么是甘特圖,怎么用Python繪制它?看這篇就夠了

          共 4283字,需瀏覽 9分鐘

           ·

          2021-10-03 16:32

          甘特圖又稱為橫道圖、條狀圖,它是以作業(yè)排序?yàn)槟康模瑢⒒顒?dòng)與時(shí)間聯(lián)系起來(lái)的最早嘗試的工具之一,能夠很直觀地顯示項(xiàng)目、進(jìn)度等和時(shí)間的內(nèi)在關(guān)系隨著時(shí)間的進(jìn)展情況,在管理和生產(chǎn)活動(dòng)中被廣泛使用。

          用來(lái)制作甘特圖的專業(yè)工具也不少,常見(jiàn)的有:Microsoft Office Project、GanttProject、WARCHART XGantt、jQuery.Gantt、Excel等,網(wǎng)絡(luò)上也有一些優(yōu)質(zhì)工具支持在線繪制甘特圖。

          可是這種現(xiàn)成的工具,往往也存在一些弊端,讓編程人員不知所措。比如說(shuō),花里胡哨的UI,讓人目不暇接,不知點(diǎn)哪個(gè)才好:

          比如說(shuō),有些基于瀏覽器的圖表需要掌握HTML、JS等編程語(yǔ)言,只會(huì)點(diǎn)Python的我直接被勸退:

          再比如,進(jìn)來(lái)就是注冊(cè)、登錄、試用,等搞完了這波操作,時(shí)間、精力也耗費(fèi)得差不多了:

          其實(shí)這種在線環(huán)境還有一個(gè)很大的弊端——安全性。我們永遠(yuǎn)也不知道用戶的數(shù)據(jù)是去了開(kāi)發(fā)者郵箱還是被短暫存儲(chǔ)后銷毀。

          相比之下,還是簡(jiǎn)簡(jiǎn)單單的代碼來(lái)的醒目、直觀、安全又便捷。而且,第二種方式,使得圖表的自定義程度也更高,配色、組件尺寸等調(diào)整也往往更加方便。

          下面用一個(gè)例子來(lái)說(shuō)明如何使用Python繪制甘特圖:

          背景:假定疫苗生產(chǎn)需經(jīng)過(guò)CJ1、CJ2、CJ3、CJ4共4個(gè)工位,且必須按照CJ1-CJ2-CJ3-CJ4的順序輪流在4個(gè)工位加工。為防止疫苗包裝出現(xiàn)混亂,規(guī)定每個(gè)工位不能同時(shí)生產(chǎn)不同類型的疫苗,且疫苗生產(chǎn)不允許插隊(duì),即進(jìn)入第一個(gè)工位安排的每類疫苗的生產(chǎn)順序一旦確定就要一直保持不變,而且前一種類型的疫苗離開(kāi)某個(gè)工位后,后一種類型的疫苗才能進(jìn)入這個(gè)工位。已知各工位生產(chǎn)加工10種疫苗的平均時(shí)長(zhǎng)(單位:min)如下表:

          目標(biāo):確定最短的總加工時(shí)間,并對(duì)生產(chǎn)過(guò)程以合適的方式進(jìn)行呈現(xiàn)。

          思路:在生產(chǎn)調(diào)度問(wèn)題中,關(guān)于最短加工時(shí)長(zhǎng)的目標(biāo)優(yōu)化問(wèn)題,比較常見(jiàn)的算法是根據(jù) Johnson 規(guī)則推廣的 CDS 算法 ,在此不再贅述,感興趣的朋友可以自行搜索。假定已確定的生產(chǎn)順序?yàn)閅M4-5-2-7-10-1-8-6-3-9,并計(jì)算出了每個(gè)工位的開(kāi)始加工時(shí)間(單位:min),如下表:

          針對(duì)生產(chǎn)過(guò)程呈現(xiàn)的問(wèn)題,我們用Python繪制甘特圖來(lái)進(jìn)行可視化處理。

          首先,導(dǎo)入依賴的庫(kù):

          import pandas as pd
          import matplotlib.pyplot as plt
          import matplotlib.patches as mpatches

          正常顯示中文和負(fù)號(hào):

          plt.rcParams['font.sans-serif'] = ['SimHei']
          plt.rcParams['axes.unicode_minus'] = False

          讀取數(shù)據(jù)表,獲取各工位加工時(shí)長(zhǎng)和各工位開(kāi)始加工時(shí)間:

          df1 = pd.read_excel('time.xlsx', sheet_name='continue_time', index_col='YM')
          df2 = pd.read_excel('time.xlsx', sheet_name='start_time', index_col='YM')

          CJS = ['CJ1''CJ2''CJ3''CJ4']
          YMS = ['YM4''YM5''YM2''YM7''YM10''YM1''YM8''YM6''YM3''YM9']

          # continue_time:各工位加工時(shí)長(zhǎng),start_time:各工位開(kāi)始加工時(shí)間
          continue_time = []
          start_time = []
          for cj in CJS:
              continue_time.append([ym for ym in df1[cj][YMS]])
              start_time.append([ym for ym in df2[cj][YMS]])  

          獲取數(shù)組大小,用于之后的循環(huán):

          m = range(len(continue_time))
          n = range(len(continue_time[0]))

          以下是繪圖過(guò)程:

          # 指定每個(gè)水平柱子顏色
          colors = ['r''pink''orange''y''g''b''deeppink''purple''brown''black']

          # 設(shè)置畫(huà)布大小和分辨率
          plt.figure(figsize=(208), dpi=200)
          # barh:水平柱狀圖,設(shè)置循壞迭代以繪制層疊效果
          for i in m:
              for j in n:
                  plt.barh(m[i] + 1, continue_time[i][j], left=start_time[i][j], color=colors[j])
          plt.title("疫苗生產(chǎn)甘特圖", fontsize=17)
          labels = [''] * len(continue_time[0])
          for f in n:
              labels[f] = "YM%d" % (f + 1)
          # 添加圖例
          patches = [mpatches.Patch(color=colors[i],label="{:s}".format(labels[i])) for i in range(len(continue_time[0]))]
          plt.legend(handles=patches, loc=4)
          # XY軸標(biāo)簽
          plt.xlabel("加工時(shí)間/分鐘", fontsize=15)
          plt.ylabel("各工位加工流程", fontsize=15)
          # XY軸刻度
          plt.yticks([1234], ['CJ1''CJ2''CJ3''CJ4'])
          # 網(wǎng)格線,此圖使用不好看,注釋掉
          # plt.grid(linestyle="--",alpha=0.5)
          plt.savefig('gatte.jpg')
          plt.show()

          到此為止,一副甘特圖就完工了。

          可是對(duì)于咱們充滿藝術(shù)細(xì)胞的數(shù)據(jù)從業(yè)者來(lái)說(shuō),圖表的顏值也是相當(dāng)重要,因此我們?cè)趤?lái)一個(gè)小小的美化,只需修改設(shè)置一下漸變配色列表就好~(來(lái)自十八線美工的手動(dòng)配置??)

          colors = ['#3B9DD3''#41ADE8''#48BEFF''#44D5FF''#40EBFF''#40E0CF''#43C59E''#42B091''#409B83''#51A48E']

          于是乎,一副精美的甘特圖出來(lái)了~

          考慮到有些小伙伴不是很喜歡漸變色,或者對(duì)色彩的區(qū)分度要求比較高,亦或者,老板大人是個(gè)色狼,哦不對(duì),色盲,那么下一種配色方案就顯得格外重要了??

          (將上面第一步的設(shè)置漸變配色列表替換為以下內(nèi)容即可~)

          from colour import Color
          red = Color("red")
          colors = list(red.range_to(Color("purple"), 14))
          colors = [color.rgb for color in colors]

          結(jié)果如下:

          是漂亮的彩虹色!無(wú)論對(duì)方是女王御姐蘿莉正太少女還是奶狗學(xué)長(zhǎng)大叔氣質(zhì)男神,分分鐘給他征服!這也是一個(gè)很通用的小技巧,對(duì)于可視化工作有很大幫助~

          最后,簡(jiǎn)單總結(jié)一下甘特圖優(yōu)缺點(diǎn)。

          優(yōu)點(diǎn)

          1.醒目、直觀、易于理解;

          2.方便調(diào)配各項(xiàng)業(yè)務(wù)及工作流程的時(shí)間安排;

          3.有專業(yè)軟件支持,無(wú)須擔(dān)心復(fù)雜計(jì)算和分析。

          局限

          1.僅僅部分地反映了活動(dòng)流程的時(shí)間、成本和范圍約束;

          2.不適用于時(shí)間依賴關(guān)系過(guò)復(fù)雜的場(chǎng)景,否則將大大提高讀圖成本。



          我們的文章到此就結(jié)束啦,如果你喜歡今天的Python 實(shí)戰(zhàn)教程,請(qǐng)持續(xù)關(guān)注Python實(shí)用寶典。

          有任何問(wèn)題,可以在公眾號(hào)后臺(tái)回復(fù):加群,回答相應(yīng)紅字驗(yàn)證信息,進(jìn)入互助群詢問(wèn)。

          原創(chuàng)不易,希望你能在下面點(diǎn)個(gè)贊和在看支持我繼續(xù)創(chuàng)作,謝謝!

          點(diǎn)擊下方閱讀原文可獲得更好的閱讀體驗(yàn)

          Python實(shí)用寶典 (pythondict.com)
          不只是一個(gè)寶典
          歡迎關(guān)注公眾號(hào):Python實(shí)用寶典

          瀏覽 107
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩AA电影 | 肏逼视频在线观看 | 智光AV| 操屄视频在线 | 国产v亚洲 |