Biểu đồ Gantt

Tổng quan

Biểu đồ Gantt là một loại biểu đồ minh họa bảng chi tiết của một dự án thành các tác vụ thành phần của dự án đó. Biểu đồ Google Gantt minh hoạ thời điểm bắt đầu, kết thúc và thời lượng của các nhiệm vụ trong một dự án, cũng như mọi phần phụ thuộc mà một nhiệm vụ có thể có. Biểu đồ Google Gantt được hiển thị trong trình duyệt bằng cách sử dụng SVG. Giống như tất cả biểu đồ của Google, biểu đồ Gantt hiển thị chú giải công cụ khi người dùng di chuột qua dữ liệu.

Lưu ý: Biểu đồ Gantt sẽ không hoạt động trong các phiên bản Internet Explorer cũ. (IE8 và các phiên bản trước đó không hỗ trợ SVG. Yêu cầu này về Biểu đồ Gantt.)

Ví dụ đơn giản

<html>
<head>
  <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
  <script type="text/javascript">
    google.charts.load('current', {'packages':['gantt']});
    google.charts.setOnLoadCallback(drawChart);

    function daysToMilliseconds(days) {
      return days * 24 * 60 * 60 * 1000;
    }

    function drawChart() {

      var data = new google.visualization.DataTable();
      data.addColumn('string', 'Task ID');
      data.addColumn('string', 'Task Name');
      data.addColumn('date', 'Start Date');
      data.addColumn('date', 'End Date');
      data.addColumn('number', 'Duration');
      data.addColumn('number', 'Percent Complete');
      data.addColumn('string', 'Dependencies');

      data.addRows([
        ['Research', 'Find sources',
         new Date(2015, 0, 1), new Date(2015, 0, 5), null,  100,  null],
        ['Write', 'Write paper',
         null, new Date(2015, 0, 9), daysToMilliseconds(3), 25, 'Research,Outline'],
        ['Cite', 'Create bibliography',
         null, new Date(2015, 0, 7), daysToMilliseconds(1), 20, 'Research'],
        ['Complete', 'Hand in paper',
         null, new Date(2015, 0, 10), daysToMilliseconds(1), 0, 'Cite,Write'],
        ['Outline', 'Outline paper',
         null, new Date(2015, 0, 6), daysToMilliseconds(1), 100, 'Research']
      ]);

      var options = {
        height: 275
      };

      var chart = new google.visualization.Gantt(document.getElementById('chart_div'));

      chart.draw(data, options);
    }
  </script>
</head>
<body>
  <div id="chart_div"></div>
</body>
</html>

Không có phần phụ thuộc

Để tạo biểu đồ Gantt không có phần phụ thuộc, hãy đảm bảo giá trị cuối cùng cho mỗi hàng trong DataTable của bạn được đặt thành null.

<html>
<head>
  <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
  <script type="text/javascript">
    google.charts.load('current', {'packages':['gantt']});
    google.charts.setOnLoadCallback(drawChart);

    function drawChart() {

      var data = new google.visualization.DataTable();
      data.addColumn('string', 'Task ID');
      data.addColumn('string', 'Task Name');
      data.addColumn('string', 'Resource');
      data.addColumn('date', 'Start Date');
      data.addColumn('date', 'End Date');
      data.addColumn('number', 'Duration');
      data.addColumn('number', 'Percent Complete');
      data.addColumn('string', 'Dependencies');

      data.addRows([
        ['2014Spring', 'Spring 2014', 'spring',
         new Date(2014, 2, 22), new Date(2014, 5, 20), null, 100, null],
        ['2014Summer', 'Summer 2014', 'summer',
         new Date(2014, 5, 21), new Date(2014, 8, 20), null, 100, null],
        ['2014Autumn', 'Autumn 2014', 'autumn',
         new Date(2014, 8, 21), new Date(2014, 11, 20), null, 100, null],
        ['2014Winter', 'Winter 2014', 'winter',
         new Date(2014, 11, 21), new Date(2015, 2, 21), null, 100, null],
        ['2015Spring', 'Spring 2015', 'spring',
         new Date(2015, 2, 22), new Date(2015, 5, 20), null, 50, null],
        ['2015Summer', 'Summer 2015', 'summer',
         new Date(2015, 5, 21), new Date(2015, 8, 20), null, 0, null],
        ['2015Autumn', 'Autumn 2015', 'autumn',
         new Date(2015, 8, 21), new Date(2015, 11, 20), null, 0, null],
        ['2015Winter', 'Winter 2015', 'winter',
         new Date(2015, 11, 21), new Date(2016, 2, 21), null, 0, null],
        ['Football', 'Football Season', 'sports',
         new Date(2014, 8, 4), new Date(2015, 1, 1), null, 100, null],
        ['Baseball', 'Baseball Season', 'sports',
         new Date(2015, 2, 31), new Date(2015, 9, 20), null, 14, null],
        ['Basketball', 'Basketball Season', 'sports',
         new Date(2014, 9, 28), new Date(2015, 5, 20), null, 86, null],
        ['Hockey', 'Hockey Season', 'sports',
         new Date(2014, 9, 8), new Date(2015, 5, 21), null, 89, null]
      ]);

      var options = {
        height: 400,
        gantt: {
          trackHeight: 30
        }
      };

      var chart = new google.visualization.Gantt(document.getElementById('chart_div'));

      chart.draw(data, options);
    }
  </script>
</head>
<body>
  <div id="chart_div"></div>
</body>
</html>

Nhóm các tài nguyên

Bạn có thể nhóm các nhiệm vụ có bản chất tương tự nhau bằng các tài nguyên. Thêm một cột thuộc loại string vào dữ liệu của bạn (sau cột Task IDTask Name) và đảm bảo mọi tác vụ cần được nhóm vào một tài nguyên có cùng mã nhận dạng tài nguyên. Các tài nguyên sẽ được nhóm theo màu.

<html>
<head>
  <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
  <script type="text/javascript">
    google.charts.load('current', {'packages':['gantt']});
    google.charts.setOnLoadCallback(drawChart);

    function daysToMilliseconds(days) {
      return days * 24 * 60 * 60 * 1000;
    }

    function drawChart() {

      var data = new google.visualization.DataTable();
      data.addColumn('string', 'Task ID');
      data.addColumn('string', 'Task Name');
      data.addColumn('string', 'Resource');
      data.addColumn('date', 'Start Date');
      data.addColumn('date', 'End Date');
      data.addColumn('number', 'Duration');
      data.addColumn('number', 'Percent Complete');
      data.addColumn('string', 'Dependencies');

      data.addRows([
        ['Research', 'Find sources', null,
         new Date(2015, 0, 1), new Date(2015, 0, 5), null,  100,  null],
        ['Write', 'Write paper', 'write',
         null, new Date(2015, 0, 9), daysToMilliseconds(3), 25, 'Research,Outline'],
        ['Cite', 'Create bibliography', 'write',
         null, new Date(2015, 0, 7), daysToMilliseconds(1), 20, 'Research'],
        ['Complete', 'Hand in paper', 'complete',
         null, new Date(2015, 0, 10), daysToMilliseconds(1), 0, 'Cite,Write'],
        ['Outline', 'Outline paper', 'write',
         null, new Date(2015, 0, 6), daysToMilliseconds(1), 100, 'Research']
      ]);

      var options = {
        height: 275
      };

      var chart = new google.visualization.Gantt(document.getElementById('chart_div'));

      chart.draw(data, options);
    }
  </script>
</head>
<body>
  <div id="chart_div"></div>
</body>
</html>

Tính toán điểm bắt đầu/kết thúc/thời lượng

Biểu đồ Gantt chấp nhận 3 giá trị liên quan đến thời lượng của việc cần làm: ngày bắt đầu, ngày kết thúc và thời lượng (tính bằng mili giây). Ví dụ: nếu không có ngày bắt đầu, biểu đồ có thể tính toán thời gian còn thiếu dựa trên ngày kết thúc và thời lượng. Việc tính toán ngày kết thúc cũng tương tự như vậy. Nếu đưa ra cả ngày bắt đầu và ngày kết thúc, thì bạn có thể tính thời lượng giữa hai ngày này.

Hãy xem bảng bên dưới để biết danh sách cách Gantt xử lý sự hiện diện của điểm bắt đầu, kết thúc và thời lượng trong các trường hợp khác nhau.

Bắt đầu Kết thúc Thời lượng Kết quả
Trình bày Trình bày Trình bày Kiểm tra để đảm bảo thời lượng giống với thời gian bắt đầu/kết thúc. Gửi lỗi nếu không nhất quán.
Trình bày Trình bày Null Tính toán thời lượng từ thời điểm bắt đầu và thời gian kết thúc.
Trình bày Null Trình bày Tính toán thời gian kết thúc.
Trình bày Null Null Tạo ra lỗi không thể tính toán thời lượng hoặc thời gian kết thúc.
Null Trình bày Trình bày Tính toán thời gian bắt đầu.
Null Null Trình bày Tính toán thời gian bắt đầu dựa trên các phần phụ thuộc. Khi kết hợp với defaultStartDate, bạn có thể bật biểu đồ chỉ bằng cách sử dụng thời lượng.
Null Trình bày Null Tạo ra lỗi không thể tính thời gian bắt đầu hoặc thời lượng.
Null Null Null Tạo ra lỗi không thể tính thời gian bắt đầu, thời gian kết thúc hoặc thời lượng.

Với thông tin nêu trên, bạn có thể tạo một biểu đồ cho thấy tuyến đường đi làm điển hình để chỉ sử dụng thời lượng của từng nhiệm vụ.

<html>
  <head>
    <script src="https://www.gstatic.com/charts/loader.js"></script>
    <script>
      google.charts.load("current", { packages: ["gantt"] });
      google.charts.setOnLoadCallback(drawChart);

      function toMilliseconds(minutes) {
        return minutes * 60 * 1000;
      }

      function drawChart() {
        var otherData = new google.visualization.DataTable();
        otherData.addColumn("string", "Task ID");
        otherData.addColumn("string", "Task Name");
        otherData.addColumn("string", "Resource");
        otherData.addColumn("date", "Start");
        otherData.addColumn("date", "End");
        otherData.addColumn("number", "Duration");
        otherData.addColumn("number", "Percent Complete");
        otherData.addColumn("string", "Dependencies");

        otherData.addRows([
          [
            "toTrain",
            "Walk to train stop",
            "walk",
            null,
            null,
            toMilliseconds(5),
            100,
            null,
          ],
          [
            "music",
            "Listen to music",
            "music",
            null,
            null,
            toMilliseconds(70),
            100,
            null,
          ],
          [
            "wait",
            "Wait for train",
            "wait",
            null,
            null,
            toMilliseconds(10),
            100,
            "toTrain",
          ],
          [
            "train",
            "Train ride",
            "train",
            null,
            null,
            toMilliseconds(45),
            75,
            "wait",
          ],
          [
            "toWork",
            "Walk to work",
            "walk",
            null,
            null,
            toMilliseconds(10),
            0,
            "train",
          ],
          [
            "work",
            "Sit down at desk",
            null,
            null,
            null,
            toMilliseconds(2),
            0,
            "toWork",
          ],
        ]);

        var options = {
          height: 275,
          gantt: {
            defaultStartDate: new Date(2015, 3, 28),
          },
        };

        var chart = new google.visualization.Gantt(
          document.getElementById("chart_div")
        );

        chart.draw(otherData, options);
      }
    </script>
  </head>
  <body>
    <div id="chart_div"></div>
  </body>
</html>

Đường dẫn quan trọng

Đường dẫn quan trọng trong biểu đồ Gantt là đường dẫn hoặc các đường dẫn ảnh hưởng trực tiếp đến ngày kết thúc. Đường dẫn quan trọng trong biểu đồ Google Gantt được tô màu đỏ theo mặc định và có thể được tuỳ chỉnh bằng các tuỳ chọn criticalPathStyle. Bạn cũng có thể tắt đường dẫn quan trọng bằng cách đặt criticalPathEnabled thành false.

        var options = {
          height: 275,
          gantt: {
            criticalPathEnabled: true,
            criticalPathStyle: {
              stroke: '#e64a19',
              strokeWidth: 5
            }
          }
        };

Tạo mũi tên

Bạn có thể tạo kiểu cho mũi tên phần phụ thuộc giữa các nhiệm vụ bằng các tuỳ chọn gantt.arrow:

        var options = {
          height: 275,
          gantt: {
            criticalPathEnabled: false, // Critical path arrows will be the same as other arrows.
            arrow: {
              angle: 100,
              width: 5,
              color: 'green',
              radius: 0
            }
          }
        };

Tạo kiểu cho kênh

Kiểu lưới được xử lý bằng cách kết hợp innerGridHorizLine, innerGridTrackinnerGridDarkTrack. Bằng cách chỉ đặt innerGridTrack, biểu đồ sẽ tính toán màu tối hơn cho innerGridDarkTrack, nhưng khi chỉ đặt innerGridDarkTrack, innerGridTrack sẽ sử dụng màu mặc định và sẽ không tính màu sáng hơn.

      var options = {
        height: 275,
        gantt: {
          criticalPathEnabled: false,
          innerGridHorizLine: {
            stroke: '#ffe0b2',
            strokeWidth: 2
          },
          innerGridTrack: {fill: '#fff3e0'},
          innerGridDarkTrack: {fill: '#ffcc80'}
        }
      };

Đang tải

Tên gói google.charts.load"gantt".

  google.charts.load("current", {packages: ["gantt"]});

Tên lớp của hình ảnh trực quan là google.visualization.Gantt.

  var chart = new google.visualization.Gantt(container);

Định dạng dữ liệu

Hàng: Mỗi hàng trong bảng trình bày một việc cần làm.

Cột:

  Cột 0 Cột 1 Cột 2 Cột 3 Cột 4 Cột 5 Cột 6 Cột 7
Mục đích: ID việc cần làm Tên việc cần làm Mã tài nguyên (không bắt buộc) Bắt đầu Kết thúc Thời lượng (tính bằng mili giây) Phần trăm hoàn thành Phần phụ thuộc
Loại dữ liệu: chuỗi chuỗi chuỗi ngày ngày number number chuỗi
Vai trò: miền data data data data data data data

 

Các lựa chọn về cấu hình

Tên Loại Mặc định Mô tả
backgroundColor.fill chuỗi "trắng" Biểu đồ tô màu dưới dạng chuỗi màu HTML.
gantt.arrow object null Đối với Biểu đồ Gantt, gantt.arrow kiểm soát các thuộc tính khác nhau của các mũi tên kết nối các nhiệm vụ.
gantt.arrow.angle number 45 Góc đầu mũi tên.
gantt.arrow.color chuỗi '#000' Màu của các mũi tên.
gantt.arrow.length number 8 Chiều dài của đầu mũi tên.
gantt.arrow.radius number 15 Bán kính để xác định đường cong của mũi tên giữa hai nhiệm vụ.
gantt.arrow.spaceSau number 4 Lượng khoảng trắng giữa đầu mũi tên và nhiệm vụ mà mũi tên trỏ đến.
gantt.arrow.width number 1.4 Chiều rộng các mũi tên.
gantt.barCornerRadius number 2 Bán kính để xác định đường cong của các góc của thanh.
gantt.barHeight number null Chiều cao của thanh đối với tác vụ.
gantt.criticalPathEnabled boolean đúng Nếu true, bất kỳ mũi tên nào trên đường dẫn quan trọng sẽ được tạo kiểu khác.
gantt.criticalPathStyle object null Một đối tượng chứa kiểu cho mọi mũi tên đường dẫn quan trọng.
gantt.criticalPathStyle.stroke chuỗi null Màu của bất kỳ mũi tên đường dẫn quan trọng nào.
gantt.criticalPathStyle.strokeWidth number 1.4 Độ dày của mọi mũi tên đường dẫn quan trọng.
gantt.defaultStartDate ngày/số null Nếu không thể tính ngày bắt đầu từ các giá trị trong Bảng dữ liệu, thì ngày bắt đầu sẽ được đặt thành ngày này. Chấp nhận giá trị date (new Date(YYYY, M, D)) hoặc số, là số mili giây cần sử dụng.
gantt.innerGridHorizLine object null Xác định kiểu của các đường lưới ngang bên trong.
gantt.innerGridHorizLine.stroke chuỗi null Màu của các đường lưới ngang bên trong.
gantt.innerGridHorizLine.strokeWidth number 1 Chiều rộng của đường lưới ngang bên trong.
gantt.innerGridTrack.fill chuỗi null Màu nền của đường lưới bên trong. Nếu bạn không chỉ định innerGridDarkTrack.fill, thì tùy chọn này sẽ áp dụng cho mọi kênh lưới.
gantt.innerGridDarkTrack.fill chuỗi null Màu tô của đường lưới màu tối thay thế.
gantt.labelMaxWidth number 300 Dung lượng tối đa được phép của mỗi nhãn việc cần làm.
gantt.labelStyle object null

Một đối tượng chứa các kiểu cho nhãn việc cần làm.

labelStyle: {
  fontName: Roboto2,
  fontSize: 14,
  color: '#757575'
},
      
gantt.percentEnabled boolean đúng Điền vào thanh việc cần làm dựa trên tỷ lệ phần trăm hoàn thành cho việc cần làm đó.
gantt.percentStyle.fill chuỗi null Màu của phần trăm hoàn thành phần thanh tác vụ.
gantt.shadowEnabled boolean đúng Nếu đặt thành true, hãy vẽ bóng đổ dưới mỗi thanh tác vụ có các phần phụ thuộc.
gantt.shadowColor chuỗi '#000' Xác định màu của bóng đổ trong mọi thanh tác vụ có các phần phụ thuộc.
gantt.shadowOffset number 1 Xác định độ lệch (tính bằng pixel) của bóng trong mọi thanh tác vụ có các phần phụ thuộc.
gantt.sortTasks boolean đúng Xác định rằng các tác vụ phải được sắp xếp theo cấu trúc liên kết nếu đúng; nếu không, hãy sử dụng cùng một thứ tự như các hàng tương ứng của DataTable.
gantt.trackHeight number null Chiều cao bản nhạc.
chiều rộng number chiều rộng của phần tử chứa Chiều rộng của biểu đồ, tính bằng pixel.
độ cao number chiều cao của phần tử chứa chiều cao của biểu đồ, tính bằng pixel.

Phương thức

Phương thức Mô tả
draw(data, options)

Vẽ biểu đồ. Biểu đồ chỉ chấp nhận các lệnh gọi phương thức khác sau khi sự kiện ready được kích hoạt. Extended description

Loại dữ liệu trả về: không có
getSelection()

Trả về một mảng các thực thể biểu đồ đã chọn. Các thực thể có thể chọn là thanh, mục nhập chú giải và danh mục. Đối với biểu đồ này, chỉ có thể chọn một thực thể vào bất kỳ thời điểm nào. Extended description .

Loại dữ liệu trả về: Một mảng các phần tử lựa chọn
setSelection()

Chọn các thực thể biểu đồ đã chỉ định. Hủy mọi lựa chọn trước đó. Các thực thể có thể chọn là thanh, mục nhập chú giải và danh mục. Đối với biểu đồ này, mỗi lần bạn chỉ có thể chọn một thực thể. Extended description .

Loại dữ liệu trả về: không có
clearChart()

Xoá biểu đồ và giải phóng tất cả tài nguyên được phân bổ của biểu đồ.

Loại dữ liệu trả về: không có

Sự kiện

Event (Sự kiện) Mô tả
click

Được kích hoạt khi người dùng nhấp vào bên trong biểu đồ. Có thể được dùng để xác định thời điểm người dùng nhấp vào tiêu đề, các phần tử dữ liệu, mục nhập chú giải, trục, đường lưới, hoặc nhãn.

Thuộc tính: targetID
error

Được kích hoạt khi xảy ra lỗi khi cố gắng hiển thị biểu đồ.

Thuộc tính: mã nhận dạng, thông báo
ready

Biểu đồ đã sẵn sàng cho các lệnh gọi phương thức bên ngoài. Nếu muốn tương tác với biểu đồ và gọi các phương thức sau khi vẽ, bạn nên thiết lập trình nghe cho sự kiện này trước khi bạn gọi phương thức draw và chỉ gọi các phương thức này sau khi sự kiện được kích hoạt.

Thuộc tính: không có
select

Được kích hoạt khi người dùng nhấp vào một thực thể hình ảnh. Để tìm hiểu những mục bạn đã chọn, hãy gọi getSelection().

Thuộc tính: không có

Chính sách về dữ liệu

Toàn bộ mã và dữ liệu đều được xử lý và kết xuất trong trình duyệt. Dữ liệu không được gửi đến bất kỳ máy chủ nào.