Trendlinien

Übersicht

Eine Trendlinie ist eine Linie, die in einem Diagramm eingeblendet wird und die Gesamtrichtung der Daten sichtbar macht. Google Charts können automatisch Trendlinien für Streudiagramme, Balkendiagramme, Säulendiagramme und Liniendiagramme generieren.

Google Charts unterstützt drei Arten von Trendlinien: linear, polynom und exponentiell.

Lineare Trendlinien

Eine lineare Trendlinie ist die gerade Linie, die sich den Daten im Diagramm am nächsten kommt. Genauer gesagt ist es die Linie, die die Summe der quadrierten Abstände von jedem Punkt zu ihr minimiert.

Im Diagramm unten sehen Sie eine lineare Trendlinie in einem Streudiagramm, in der das Alter des Zuckerahorns mit dem Durchmesser seiner Baumstämme verglichen wird. Wenn Sie den Mauszeiger auf die Trendlinie bewegen, wird die von Google Charts berechnete Gleichung angezeigt: 4,885-mal Durchmesser + 0,730.

Wenn Sie eine Trendlinie in einem Diagramm zeichnen möchten, verwenden Sie die Option trendlines und geben Sie an, welche Datenreihe verwendet werden soll:

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

Lineare Trendlinien sind die am häufigsten verwendete Art von Trendlinien. Aber manchmal eignet sich eine Kurve am besten, um Daten zu beschreiben. Dazu benötigen wir eine andere Art von Trendlinie.

Exponentielle Trendlinien

Wenn sich Ihre Daten am besten anhand eines Exponentials im Format eax + b erklären lassen, können Sie mit dem Attribut type eine exponentielle Trendlinie angeben, wie unten dargestellt:

Hinweis:Im Gegensatz zu linearen Trendlinien gibt es mehrere Möglichkeiten, exponentielle Trendlinien zu berechnen. Wir bieten derzeit nur eine Methode, unterstützen jedoch zukünftig mehr. Daher kann sich der Name oder das Verhalten der aktuellen exponentiellen Trendlinie ändern.

Für dieses Diagramm verwenden wir auch visibleInLegend: true, um die exponentielle Kurve in der Legende anzuzeigen.

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

Farbe ändern

Standardmäßig sind Trendlinien die gleichen Farben wie bei den Datenreihen, aber heller. Sie können dies mit dem Attribut color überschreiben. Hier wird die Anzahl der π-Zahlen pro Jahr während einer rechenfruchtbaren Zeit dargestellt, wobei die exponentielle Trendlinie grün dargestellt wird.

Hier ist die Spezifikation für Trendlinien:

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

Polynom-Trendlinien

Geben Sie zum Generieren einer polynomen Trendlinie den Typ polynomial und degree an. Verwenden Sie diese mit Vorsicht, da sie manchmal zu irreführenden Ergebnissen führen können. Im folgenden Beispiel wird ein ungefähr lineares Dataset mit einer kubischen Trendlinie (3) dargestellt:

Die Umrandung nach dem letzten Datenpunkt ist nur sichtbar, weil wir die horizontale Achse künstlich auf 15 verlängert haben. Ohne den Wert von hAxis.maxValue auf 15 sähe Folgendes aus:

Dieselben Daten, dasselbe Polynom und unterschiedliches Fenster für die Daten.

Optionen
  var options = {
    title: 'Age vs. Weight comparison',
    legend: 'none',
    crosshair: { trigger: "both", orientation: "both" },
    trendlines: {
      0: {
        type: 'polynomial',
        degree: 3,
        visibleInLegend: true,
      }
    }
  };
Vollständiges HTML
<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>

Deckkraft und Linienbreite ändern

Sie können die Transparenz der Trendlinie ändern. Legen Sie dazu opacity auf einen Wert zwischen 0,0 und 1,0 und die Linienbreite mit der Option lineWidth fest.

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

Die Option lineWidth ist für die meisten Verwendungszwecke ausreichend. Wenn Ihnen der Look gefällt, gibt es jedoch die Option pointSize, mit der Sie die Größe der auswählbaren Punkte innerhalb der Trendlinie anpassen können:

Genau wie das Licht ist eine Welle und ein Partikel, eine Trendlinie, eine Linie und mehrere Punkte. Was Nutzern angezeigt wird, hängt davon ab, wie sie damit interagieren: Normalerweise wird eine Linie eingeblendet. Wird der Mauszeiger jedoch auf die Trendlinie bewegt, wird ein bestimmter Punkt hervorgehoben. Dieser Punkt hat einen Durchmesser gleich:

  • die Trendlinie pointSize, falls definiert, andernfalls...
  • die globale pointSize, falls definiert, sonst...
  • 7

Wenn Sie jedoch entweder die globale oder die Trendlinien-pointSize-Option festlegen, werden alle auswählbaren Punkte angezeigt, unabhängig von der lineWidth der Trendlinie.

Optionen
  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
      }
    }
  };
Vollständiges HTML
<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>

Punkte sichtbar machen

Trendlinien werden durch das Stempeln mehrerer Punkte im Diagramm ergänzt. Die Option pointsVisible der Trendlinie bestimmt, ob die Punkte für eine bestimmte Trendlinie sichtbar sind. Die Standardoption für alle Trendlinien ist true. Wenn Sie die Sichtbarkeit eines Punkts für die erste Trendlinie deaktivieren möchten, legen Sie trendlines.0.pointsVisible: false fest.

Das folgende Diagramm zeigt, wie die Sichtbarkeit von Punkten pro Trendlinie gesteuert wird.

Optionen
        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
            }
          }
        };
    
Vollständiges HTML
<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>

    

Label ändern

Wenn Sie visibleInLegend auswählen, zeigt das Label standardmäßig die Gleichung der Trendlinie an. Sie können labelInLegend verwenden, um ein anderes Label anzugeben. Hier wird für jede der beiden Reihen eine Trendlinie angezeigt. Dabei werden die Labels in der Legende auf „Fehlerlinie“ (für Reihe 0) und „Testzeile“ (Serie 1) gesetzt.

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

Korrelationen

Der Bestimmtheitscode, in den Statistiken R 2 genannt, gibt an, wie eng eine Trendlinie den Daten entspricht. Eine perfekte Korrelation ist 1, 0 und eine perfekte Korrelation.

Sie können R2 in der Legende des Diagramms darstellen lassen. Setzen Sie dazu die Option showR2 auf 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>