Zeichentechniken für Diagramme

Auf dieser Seite sind die verschiedenen Möglichkeiten zum Instanziieren und Zeichnen eines Diagramms auf der Seite aufgeführt. Jede Methode hat die folgenden Vor- und Nachteile.

Inhalt

  1. chart.draw()
  2. ChartWrapper
  3. DrawChart()
  4. Weitere Informationen

Chart.draw()

Dies ist die grundlegende Methode, die im Beispiel für ein Hello-Diagramm in dieser Dokumentation behandelt wird. Es sind drei grundlegende Schritte erforderlich:

  1. Laden des gstatic libraryloaders, der Google Visualization und der Chart-Bibliotheken
  2. Daten vorbereiten
  3. Diagrammoptionen vorbereiten
  4. Instanziieren Sie die Diagrammklasse und übergeben Sie einen Ziehpunkt an das Seitencontainerelement.
  5. Optional registrieren, um Diagrammereignisse zu erhalten. Wenn Sie Methoden im Diagramm aufrufen möchten, sollten Sie auf das Ereignis „ready“ warten.
  6. Rufen Sie chart.draw() auf und übergeben Sie die Daten und Optionen.

Vorteile:

  • Sie haben die vollständige Kontrolle über jeden Schritt des Prozesses.
  • Sie können sich registrieren, um alle im Diagramm ausgelösten Ereignisse zu beobachten.

Nachteile:

  • Ausführlich
  • Sie müssen alle erforderlichen Diagrammbibliotheken explizit laden.
  • Wenn Sie Abfragen senden, müssen Sie den Callback manuell implementieren, auf Erfolg prüfen, den zurückgegebenen DataTable extrahieren und an das Diagramm übergeben.

Beispiel:

<html>
   <head>
    <!--Load the AJAX API-->
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script type="text/javascript">
     var data;
     var chart;

      // Load the Visualization API and the piechart package.
      google.charts.load('current', {'packages':['corechart']});

      // Set a callback to run when the Google Visualization API is loaded.
      google.charts.setOnLoadCallback(drawChart);

      // Callback that creates and populates a data table,
      // instantiates the pie chart, passes in the data and
      // draws it.
      function drawChart() {

        // Create our data table.
        data = new google.visualization.DataTable();
        data.addColumn('string', 'Topping');
        data.addColumn('number', 'Slices');
        data.addRows([
          ['Mushrooms', 3],
          ['Onions', 1],
          ['Olives', 1],
          ['Zucchini', 1],
          ['Pepperoni', 2]
        ]);

        // Set chart options
        var options = {'title':'How Much Pizza I Ate Last Night',
                       'width':400,
                       'height':300};

        // Instantiate and draw our chart, passing in some options.
        chart = new google.visualization.PieChart(document.getElementById('chart_div'));
        google.visualization.events.addListener(chart, 'select', selectHandler);
        chart.draw(data, options);
      }

      function selectHandler() {
        var selectedItem = chart.getSelection()[0];
        var value = data.getValue(selectedItem.row, 0);
        alert('The user selected ' + value);
      }

    </script>
  </head>
  <body>
    <!--Div that will hold the pie chart-->
    <div id="chart_div" style="width:400; height:300"></div>
  </body>
</html>

ChartWrapper

ChartWrapper ist eine Convenience-Klasse, die das Laden aller geeigneten Diagrammbibliotheken übernimmt und das Senden von Abfragen an Chart Tools-Datenquellen vereinfacht.

Vorteile:

  • Viel weniger Code
  • Lädt alle erforderlichen Diagrammbibliotheken
  • Vereinfacht das Abfragen von Datenquellen, indem das Query-Objekt erstellt und der Callback für Sie verarbeitet wird.
  • Übergeben Sie die Container-Element-ID, um getElementByID aufzurufen.
  • Daten können in verschiedenen Formaten gesendet werden: als Array von Werten, als JSON-Literal-String oder als DataTable-Handle

Nachteile:

  • ChartWrapper propagiert derzeit nur die Ereignisse „select“, „ready“ und „error“. Wenn Sie andere Ereignisse abrufen möchten, müssen Sie auf das umschlossene Diagramm zugreifen und die Ereignisse dort abonnieren. Beispiele finden Sie in der ChartWrapper-Dokumentation.

Beispiele:

Hier sehen Sie ein Beispiel für ein Säulendiagramm mit lokal erstellten Daten, die als Array angegeben sind. Sie können mit der Arraysyntax keine Diagrammlabels oder Datum/Uhrzeit-Werte angeben. Sie könnten aber manuell ein DataTable-Objekt mit diesen Werten erstellen und dieses an das Attribut dataTable übergeben.

<html>
  <head>
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script type="text/javascript">
      google.charts.load('current');   // Don't need to specify chart libraries!
      google.charts.setOnLoadCallback(drawVisualization);

      function drawVisualization() {
        var wrapper = new google.visualization.ChartWrapper({
          chartType: 'ColumnChart',
          dataTable: [['', 'Germany', 'USA', 'Brazil', 'Canada', 'France', 'RU'],
                      ['', 700, 300, 400, 500, 600, 800]],
          options: {'title': 'Countries'},
          containerId: 'vis_div'
        });
        wrapper.draw();
      }
    </script>
  </head>
  <body style="font-family: Arial;border: 0 none;">
    <div id="vis_div" style="width: 600px; height: 400px;"></div>
  </body>
</html>

Hier ein Beispiel für ein Liniendiagramm, bei dem die Daten über eine Google-Tabelle abgerufen werden. Der Code muss den Callback nicht verarbeiten.

<html>
  <head>
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script type="text/javascript">
      google.charts.load('current');
      google.charts.setOnLoadCallback(drawVisualization);

      function drawVisualization() {
        var wrapper = new google.visualization.ChartWrapper({
          chartType: 'LineChart',
          dataSourceUrl: 'http://spreadsheets.google.com/tq?key=pCQbetd-CptGXxxQIG7VFIQ&pub=1',
          query: 'SELECT A,D WHERE D > 100 ORDER BY D',
          options: {'title': 'Countries'},
          containerId: 'vis_div'
        });
        wrapper.draw()

        // No query callback handler needed!
      }
    </script>
  </head>
  <body style="font-family: Arial;border: 0 none;">
    <div id="vis_div" style="width: 600px; height: 400px;"></div>
  </body>
</html>

In Kombination mit dem automatischen Laden kann dies zu sehr kompaktem Code führen:

<html>
  <head>
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script type="text/javascript">
      google.charts.load('current');   // Don't need to specify chart libraries!
      google.charts.setOnLoadCallback(drawVisualization);

      function drawVisualization() {
        var wrapper = new google.visualization.ChartWrapper({
          chartType: 'LineChart',
          dataSourceUrl: 'http://spreadsheets.google.com/tq?key=pCQbetd-CptGXxxQIG7VFIQ&pub=1',
          query: 'SELECT A,D WHERE D > 100 ORDER BY D',
          options: {'title': 'Countries'},
          containerId: 'vis_div'
        });
        wrapper.draw()
      }
    </script>
  </head>
  <body style="font-family: Arial;border: 0 none;">
    <div id="vis_div" style="width: 600px; height: 400px;"></div>
  </body>
</html>

Diagrammeditor mit ChartWrapper verwenden

Mit dem in Google Tabellen integrierten Dialogfeld „Diagrammeditor“ können Sie ein Diagramm entwerfen und dann den serialisierten ChartWrapper-String anfordern, der das Diagramm darstellt. Sie können diesen String dann kopieren und einfügen und wie oben unter ChartWrapper beschrieben verwenden.

Sie können einen Diagrammeditor in Ihre eigene Seite einbetten und Methoden zur Verfügung stellen, damit Nutzer eine Verbindung zu anderen Datenquellen herstellen und den String ChartWrapper zurückgeben können. Weitere Informationen finden Sie in der ChartEditor-Referenzdokumentation.

 

DrawChart()

DrawChart ist eine globale statische Methode, die ein ChartWrapper-Element umschließt.

Vorteile:

  • Wie ChartWrapper, aber etwas kürzer.

Nachteile:

  • Es wird kein Handle zum Wrapper zurückgegeben, sodass keine Ereignisse verarbeitet werden können.
<DOCTYPE html>
<html>
  <head>
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script type="text/javascript">
      google.charts.load('current');   // Don't need to specify chart libraries!
      google.charts.setOnLoadCallback(drawVisualization);
      function drawVisualization() {
        google.visualization.drawChart({
         "containerId": "visualization_div",
         "dataSourceUrl": "https://spreadsheets.google.com/a/google.com/tq?key=pCQbetd-CptGXxxQIG7VFIQ&pub=1",
         "query":"SELECT A,D WHERE D > 100 ORDER BY D",
         "refreshInterval": 5,
         "chartType": "Table",
         "options": {
            "alternatingRowStyle": true,
            "showRowNumber" : true
         }
       });
      }
    google.charts.setOnLoadCallback(drawVisualization);
    </script>
  </head>
  <body style="font-family: Arial;border: 0 none;">
    <div id="visualization_div" style="width: 600px; height: 400px;"></div>
  </body>
</html>

Weitere Informationen