Đường xu hướng

Tổng quan

Đường xu hướng là một đường xếp chồng lên biểu đồ cho biết hướng tổng thể của dữ liệu. Biểu đồ của Google có thể tự động tạo đường xu hướng cho Biểu đồ tán xạ, Biểu đồ thanh, Biểu đồ cột và Biểu đồ dạng đường.

Google Biểu đồ hỗ trợ 3 loại đường xu hướng: tuyến tính, đa thức và luỹ thừa.

Đường xu hướng tuyến tính

Đường xu hướng tuyến tính là đường thẳng gần đúng nhất với dữ liệu trong biểu đồ. (Nói chính xác, đó là đường giảm thiểu tổng khoảng cách bình phương từ mọi điểm tới nó.)

Trong biểu đồ bên dưới, bạn có thể thấy đường xu hướng tuyến tính trên biểu đồ tán xạ so sánh tuổi của cây phong đường với đường kính của thân. Bạn có thể di chuột qua đường xu hướng để xem phương trình do Google Biểu đồ tính toán: 4,885 lần đường kính + 0,730.

Để vẽ một đường xu hướng trên biểu đồ, hãy sử dụng lựa chọn trendlines và chỉ định chuỗi dữ liệu cần sử dụng:

google.charts.setOnLoadCallback(drawChart);
function drawChart() {
  var data = google.visualization.arrayToDataTable([
    ['Diameter', 'Age'],
    [8, 37], [4, 19.5], [11, 52], [4, 22], [3, 16.5], [6.5, 32.8], [14, 72]]);

  var options = {
    title: 'Age of sugar maples vs. trunk diameter, in inches',
    hAxis: {title: 'Diameter'},
    vAxis: {title: 'Age'},
    legend: 'none',
    trendlines: { 0: {} }    // Draw a trendline for data series 0.
  };

  var chart = new google.visualization.ScatterChart(document.getElementById('chart_div'));
  chart.draw(data, options);
}

Đường xu hướng tuyến tính là loại đường xu hướng phổ biến nhất. Nhưng đôi khi, đường cong là cách tốt nhất để mô tả dữ liệu. Để làm được điều đó, chúng tôi sẽ cần một loại đường xu hướng khác.

Đường xu hướng luỹ thừa

Nếu dữ liệu được giải thích tốt nhất theo cấp số nhân của dạng eax+b, bạn có thể sử dụng thuộc tính type để chỉ định đường xu hướng số mũ, như minh hoạ dưới đây:

Lưu ý: Không giống như đường xu hướng tuyến tính, có một số cách để tính đường xu hướng theo cấp số nhân. Hiện tại, chúng tôi chỉ cung cấp một phương thức, nhưng chúng tôi sẽ hỗ trợ thêm nhiều phương thức trong tương lai. Vì vậy, tên hoặc hành vi của đường xu hướng luỹ thừa hiện tại có thể sẽ thay đổi.

Đối với biểu đồ này, chúng tôi cũng sử dụng visibleInLegend: true để hiển thị đường cong luỹ thừa trong phần chú thích.

google.charts.setOnLoadCallback(drawChart);
function drawChart() {
  var data = google.visualization.arrayToDataTable([
    ['Generation', 'Descendants'],
    [0, 1], [1, 33], [2, 269], [3, 2013]
 ]);

  var options = {
    title: 'Descendants by Generation',
    hAxis: {title: 'Generation', minValue: 0, maxValue: 3},
    vAxis: {title: 'Descendants', minValue: 0, maxValue: 2100},
    trendlines: {
      0: {
        type: 'exponential',
        visibleInLegend: true,
      }
    }
  };

  var chart = new google.visualization.ScatterChart(document.getElementById('chart_div2'));
  chart.draw(data, options);
}

Thay đổi màu

Theo mặc định, các đường xu hướng được tô màu giống với chuỗi dữ liệu nhưng nhạt hơn. Bạn có thể ghi đè giá trị đó bằng thuộc tính color. Ở đây, chúng tôi lập biểu đồ có bao nhiêu chữ số π được tính theo năm trong một giai đoạn tính toán hiệu quả, tô màu xanh lục cho đường xu hướng luỹ thừa.

Dưới đây là thông số của đường xu hướng:

    trendlines: {
      0: {
        type: 'exponential',
        color: 'green',
      }
    }

Đường xu hướng đa thức

Để tạo đường xu hướng đa thức, hãy chỉ định loại polynomialdegree. Hãy thận trọng khi sử dụng, vì đôi khi có thể dẫn đến kết quả gây hiểu lầm. Trong ví dụ bên dưới, nơi một tập dữ liệu đại khái tuyến tính được biểu thị bằng một đường xu hướng lập phương (độ 3):

Lưu ý rằng giảm mạnh sau điểm dữ liệu cuối cùng chỉ hiển thị bởi vì chúng tôi đã mở rộng trục hoành một cách giả tạo lên 15. Nếu không đặt hAxis.maxValue thành 15, giá trị này sẽ có dạng như sau:

Cùng dữ liệu, cùng đa thức, cửa sổ dữ liệu khác nhau.

Tuỳ chọn
  var options = {
    title: 'Age vs. Weight comparison',
    legend: 'none',
    crosshair: { trigger: "both", orientation: "both" },
    trendlines: {
      0: {
        type: 'polynomial',
        degree: 3,
        visibleInLegend: true,
      }
    }
  };
HTML đầy đủ
<html>
 <head>
   <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
   <script type="text/javascript">
     google.charts.load("current", {packages:["corechart"]});
     google.charts.setOnLoadCallback(drawChart);
     function drawChart() {
       var data = google.visualization.arrayToDataTable([
         ['Age', 'Weight'],
         [ 8,      12],
         [ 4,      5.5],
         [ 11,     14],
         [ 4,      5],
         [ 3,      3.5],
         [ 6.5,    7]
       ]);

       var options = {
         title: 'Age vs. Weight comparison',
         legend: 'none',
         crosshair: { trigger: 'both', orientation: 'both' },
         trendlines: {
           0: {
             type: 'polynomial',
             degree: 3,
             visibleInLegend: true,
           }
         }
       };

       var chart = new google.visualization.ScatterChart(document.getElementById('polynomial2_div'));
       chart.draw(data, options);
     }
   </script>
 </head>
 <body>
  <div id='polynomial2_div' style='width: 900px; height: 500px;'></div>
 </body>
</html>

Thay đổi độ mờ và độ rộng đường kẻ

Bạn có thể thay đổi độ trong suốt của đường xu hướng bằng cách đặt opacity thành một giá trị nằm trong khoảng từ 0 đến 1, và độ rộng của đường bằng cách đặt tuỳ chọn lineWidth.

    trendlines: {
      0: {
        color: 'purple',
        lineWidth: 10,
        opacity: 0.2,
        type: 'exponential'
      }
    }

Tuỳ chọn lineWidth là đủ cho hầu hết các trường hợp sử dụng, nhưng nếu thích giao diện này thì bạn có thể dùng tuỳ chọn pointSize để tuỳ chỉnh kích thước của các dấu chấm có thể chọn bên trong đường xu hướng:

Giống như ánh sáng vừa là sóng vừa là hạt, đường xu hướng vừa là một đường vừa là một nhóm các điểm. Nội dung mà người dùng nhìn thấy tuỳ thuộc vào cách họ tương tác với đường kẻ đó: thông thường là một đường, nhưng khi họ di chuột qua đường xu hướng, một điểm cụ thể sẽ được làm nổi bật. Điểm đó sẽ có đường kính bằng:

  • đường xu hướng pointSize nếu đã xác định, nếu không...
  • pointSize chung nếu được xác định, nếu không...
  • 7

Tuy nhiên, nếu bạn đặt tuỳ chọn pointSize toàn cục hoặc đường xu hướng pointSize, tất cả các điểm có thể chọn sẽ hiển thị, độc lập với lineWidth của đường xu hướng.

Tuỳ chọn
  var options = {
    legend: 'none',
    hAxis: { ticks: [] },
    vAxis: { ticks: [] },
    pointShape: 'diamond',
    trendlines: {
      0: {
        type: 'polynomial',
        degree: 3,
        visibleInLegend: true,
        pointSize: 20, // Set the size of the trendline dots.
	opacity: 0.1
      }
    }
  };
HTML đầy đủ
<html>
  <head>
  <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
  <script type="text/javascript">
    google.charts.load("current", {packages:["corechart"]});
    google.charts.setOnLoadCallback(drawChart);
      function drawChart() {
        var data = google.visualization.arrayToDataTable([
          ['X', 'Y'],
          [0, 4],
          [1, 2],
          [2, 4],
          [3, 6],
          [4, 4]
        ]);

        var options = {
          legend: 'none',
          hAxis: { ticks: [] },
          vAxis: { ticks: [] },
          colors: ['#703583'],
          pointShape: 'diamond',
          trendlines: {
            0: {
              type: 'polynomial',
              degree: 3,
              visibleInLegend: true,
              pointSize: 20, // Set the size of the trendline dots.
              opacity: 0.1
            }
          }
      };

      var chart = new google.visualization.ScatterChart(document.getElementById('chart_pointSize'));

      chart.draw(data, options);
    }
    </script>
  </head>
  <body>
    <div id="chart_pointSize" style="width: 900px; height: 500px;"></div>
  </body>
</html>

Hiển thị các điểm

Các đường xu hướng được tạo bằng cách đánh dấu một loạt các dấu chấm trên biểu đồ. Tuỳ chọn pointsVisible của đường xu hướng sẽ xác định xem các điểm của một đường xu hướng cụ thể có hiển thị hay không. Lựa chọn mặc định cho tất cả các đường xu hướng là true, nhưng nếu bạn muốn tắt chế độ hiển thị điểm cho đường xu hướng đầu tiên, hãy đặt trendlines.0.pointsVisible: false.

Biểu đồ dưới đây minh hoạ cách kiểm soát khả năng hiển thị của các điểm trên cơ sở mỗi đường xu hướng.

Tuỳ chọn
        var options = {
          height: 500,
          legend: 'none',
          colors: ['#9575cd', '#33ac71'],
          pointShape: 'diamond',
          trendlines: {
            0: {
              type: 'exponential',
              pointSize: 20,
              opacity: 0.6,
              pointsVisible: false
            },
            1: {
              type: 'linear',
              pointSize: 10,
              pointsVisible: true
            }
          }
        };
    
HTML đầy đủ
<html>
  <head>
    <meta charset="utf-8"/>
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script type="text/javascript">
      google.charts.load('current', {packages:['corechart']});
      google.charts.setOnLoadCallback(drawChart);

      function drawChart() {
        var data = google.visualization.arrayToDataTable([
          ['X', 'Y', 'Z'],
          [0, 4, 5],
          [1, 2, 6],
          [2, 4, 8],
          [3, 6, 10],
          [4, 4, 11],
          [5, 8, 13],
          [6, 12, 15],
          [7, 15, 19],
          [8, 25, 21],
          [9, 34, 23],
          [10, 50, 27]
        ]);

        var options = {
          height: 500,
          legend: 'none',
          colors: ['#9575cd', '#33ac71'],
          pointShape: 'diamond',
          trendlines: {
            0: {
              type: 'exponential',
              pointSize: 20,
              opacity: 0.6,
              pointsVisible: false
            },
            1: {
              type: 'linear',
              pointSize: 10,
              pointsVisible: true
            }
          }
        };

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

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

    

Thay đổi nhãn

Theo mặc định, nếu bạn chọn visibleInLegend, nhãn sẽ hiển thị phương trình của đường xu hướng. Bạn có thể sử dụng labelInLegend để chỉ định một nhãn khác. Ở đây, chúng ta hiển thị một đường xu hướng cho mỗi loạt hai, đặt nhãn trong huyền thoại thành "Lỗi dòng" (đối với loạt 0) và "Dòng thử nghiệm" (đối với loạt 1).

    trendlines: {
      0: {
        labelInLegend: 'Bug line',
        visibleInLegend: true,
      },
      1: {
        labelInLegend: 'Test line',
        visibleInLegend: true,
      }
    }

Mối quan hệ

Hệ số xác định, được gọi là R2 trong số liệu thống kê, giúp xác định mức độ trùng khớp của đường xu hướng với dữ liệu. Mối tương quan hoàn hảo là 1.0 và tương quan hoàn hảo là 0.0.

Bạn có thể mô tả R2 trong phần chú thích của biểu đồ bằng cách đặt tuỳ chọn showR2 thành true.

<html>
  <head>
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script type="text/javascript">
      google.charts.load('current', {'packages':['corechart']});
      google.charts.setOnLoadCallback(drawChart);
      function drawChart() {
        var data = google.visualization.arrayToDataTable([
          ['Age', 'Weight'],
          [ 8,      12],
          [ 4,      5.5],
          [ 11,     14],
          [ 4,      5],
          [ 3,      3.5],
          [ 6.5,    7]
        ]);

        var options = {
          hAxis: {minValue: 0, maxValue: 15},
          vAxis: {minValue: 0, maxValue: 15},
          chartArea: {width:'50%'},
          trendlines: {
            0: {
              type: 'linear',
              showR2: true,
              visibleInLegend: true
            }
          }
        };

        var chartLinear = new google.visualization.ScatterChart(document.getElementById('chartLinear'));
        chartLinear.draw(data, options);

        options.trendlines[0].type = 'exponential';
        options.colors = ['#6F9654'];

        var chartExponential = new google.visualization.ScatterChart(document.getElementById('chartExponential'));
        chartExponential.draw(data, options);
      }
    </script>
  </head>
  <body>
    <div id="chartLinear" style="height: 350px; width: 800px"></div>
    <div id="chartExponential" style="height: 350px; width: 800px"></div>
  </body>
</html>