VegaChart

Übersicht

Ein VegaChart ist eine von vielen möglichen Visualisierungen, die mit der Vega Visualization Grammar (Vega-Visualisierungsgramma) erstellt werden können. Hierbei handelt es sich um eine deklarative Sprache zum Erstellen, Speichern und Teilen interaktiver Visualisierungsdesigns. Mit Vega können Sie das visuelle Erscheinungsbild und das interaktive Verhalten einer Visualisierung im JSON-Format beschreiben und mit Canvas oder SVG webbasierte Ansichten generieren.

Wenn Sie ein VegaChart zeichnen, müssen Sie in die Optionen eine Spezifikation einfügen, wie das Diagramm in der Vega-Visualisierungsgrammatik erstellt werden soll. Einige Beispiele solcher Spezifikationen finden Sie unten, und mehrere weitere Beispiele finden Sie auf der Seite VegaChart-Beispiele.

Hinweis: Mit VegaChart für Google-Diagramme kann jedes Vega-Diagramm gezeichnet werden, das Sie mit einer Vega-JSON-Spezifikation angeben können (einschließlich aller Elemente in der Beispielgalerie). Zusätzliche Funktionen, für die Aufrufe der Vega-API erforderlich sind, sind noch nicht verfügbar.

Ein einfaches Beispiel: das Balkendiagramm

Hier ist ein einfaches Beispiel für ein VegaChart, das ein Balkendiagramm zeichnet. Weitere Informationen finden Sie im ursprünglichen Beispiel, in der ausführlichen Anleitung und im Balkendiagramm im Vega-Diagrammeditor.

Dies stellt zwar eine weitere Möglichkeit dar, Balkendiagramme in Google Charts zu erstellen. Wir planen jedoch, alle Funktionen der anderen Balken- und Säulendiagramme in eine neue Implementierung zu integrieren, die auf diesem VegaChart basiert.

Beachten Sie in diesem Beispiel, dass die Option „data“ durch die folgende ersetzt wird, in der die vom Zeichenaufruf bereitgestellte „datatable“ als Quelle für ein anderes Datenobjekt namens „table“ verwendet wird. Im Rest der Vega-Spezifikation wird „table“ verwendet.

  'data': [{'name': 'table', 'source': 'datatable'}],

<html>
  <head>
    <script src='https://www.gstatic.com/charts/loader.js'></script>
    <script>
      google.charts.load('upcoming', {'packages': ['vegachart']}).then(drawChart);

      function drawChart() {
        const dataTable = new google.visualization.DataTable();
        dataTable.addColumn({type: 'string', 'id': 'category'});
        dataTable.addColumn({type: 'number', 'id': 'amount'});
        dataTable.addRows([
          ['A', 28],
          ['B', 55],
          ['C', 43],
          ['D', 91],
          ['E', 81],
          ['F', 53],
          ['G', 19],
          ['H', 87],
        ]);

        const options = {
          "vega": {
            "$schema": "https://vega.github.io/schema/vega/v4.json",
            "width": 500,
            "height": 200,
            "padding": 5,

            'data': [{'name': 'table', 'source': 'datatable'}],

            "signals": [
              {
                "name": "tooltip",
                "value": {},
                "on": [
                  {"events": "rect:mouseover", "update": "datum"},
                  {"events": "rect:mouseout",  "update": "{}"}
                ]
              }
            ],

            "scales": [
              {
                "name": "xscale",
                "type": "band",
                "domain": {"data": "table", "field": "category"},
                "range": "width",
                "padding": 0.05,
                "round": true
              },
              {
                "name": "yscale",
                "domain": {"data": "table", "field": "amount"},
                "nice": true,
                "range": "height"
              }
            ],

            "axes": [
              { "orient": "bottom", "scale": "xscale" },
              { "orient": "left", "scale": "yscale" }
            ],

            "marks": [
              {
                "type": "rect",
                "from": {"data":"table"},
                "encode": {
                  "enter": {
                    "x": {"scale": "xscale", "field": "category"},
                    "width": {"scale": "xscale", "band": 1},
                    "y": {"scale": "yscale", "field": "amount"},
                    "y2": {"scale": "yscale", "value": 0}
                  },
                  "update": {
                    "fill": {"value": "steelblue"}
                  },
                  "hover": {
                    "fill": {"value": "red"}
                  }
                }
              },
              {
                "type": "text",
                "encode": {
                  "enter": {
                    "align": {"value": "center"},
                    "baseline": {"value": "bottom"},
                    "fill": {"value": "#333"}
                  },
                  "update": {
                    "x": {"scale": "xscale", "signal": "tooltip.category", "band": 0.5},
                    "y": {"scale": "yscale", "signal": "tooltip.amount", "offset": -2},
                    "text": {"signal": "tooltip.amount"},
                    "fillOpacity": [
                      {"test": "datum === tooltip", "value": 0},
                      {"value": 1}
                    ]
                  }
                }
              }
            ]
          }
        };

        const chart = new google.visualization.VegaChart(document.getElementById('chart-div'));
        chart.draw(dataTable, options);
      }
    </script>
  </head>

  <body>
    <div id="chart-div" style="width: 700px; height: 250px;"></div>
  </body>

</html>


Wird geladen

Der Paketname „google.charts.load“ lautet "vegachart".

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

Der Klassenname der Visualisierung lautet google.visualization.VegaChart.

var visualization = new google.visualization.VegaChart(container);

Datenformat

Die Übergabe von Daten an ein VegaChart ist sehr ähnlich wie bei anderen Google Charts mithilfe einer DataTable (oder DataView). Der Hauptunterschied besteht darin, dass VegaChart nicht anhand der Reihenfolge der Spalten bestimmt, wie sie verwendet werden, sondern dass die ID jeder Spalte mit der von Ihnen angegebenen Vega-Visualisierung übereinstimmt. Die folgende DataTable wird beispielsweise mit Spalten erstellt, die IDs für 'category' und 'amount' enthalten. In der Option „vega“ werden dieselben IDs verwendet, um auf diese Spalten zu verweisen.

Mit DataTable
        const dataTable = new google.visualization.DataTable();
        dataTable.addColumn({type: 'string', 'id': 'category'});
        dataTable.addColumn({type: 'number', 'id': 'amount'});
        dataTable.addRows([
          ['A', 28],
          ['B', 55],
          ['C', 43],
        ]);

        const options = {
          'vega': {
            ...
            // Here we create the Vega data object named 'datatable',
            // which will be passed in via the draw() call with a DataTable.
            'data': {'name': 'datatable'},

            'scales': [
              {
                'name': 'yscale',
                // Here is an example of how to use the 'amount' field from 'datatable'.
                'domain': {'data': 'datatable', 'field': 'amount'},
              }
            ]
          }
        };

        const chart = new google.visualization.VegaChart(
          document.getElementById('chart-div'));
        chart.draw(dataTable, options);
    
Mit Inline-Daten von Vega
        // A DataTable is required, but it may be empty.
        const dataTable = new google.visualization.DataTable();
        const options = {
          'vega': {
            // Here the data is specified inline in the Vega specification.
            "data": [
              {
               "name": "table",
                "values": [
                  {"category": "A", "amount": 28},
                  {"category": "B", "amount": 55},
                  {"category": "C", "amount": 43},
                ]
              }
            ],

            'scales': [
              {
                'name': 'yscale',
                // Here is how Vega normally uses the 'amount' field from 'table'.
                "domain": {"data": "table", "field": "category"},
              }
            ]
          }
        };

        const chart = new google.visualization.VegaChart(
          document.getElementById('chart-div'));
        chart.draw(dataTable, options);
    

Allerdings kann auf diese Weise nur eine solche DataTable an VegaChart übergeben werden. Für einige Vega-Diagramme ist jedoch mehr als eine Datentabelle erforderlich. Wir werden diese Einschränkung in einer zukünftigen Version von Google Charts beheben.

In der Zwischenzeit kannst du zusätzliche Daten, die du verwenden möchtest, in der 'vega' 'data'-Option angeben, indem du sie inline einfügst oder über eine URL lädst. Beispiele für beides finden Sie unten.

Konfigurationsoptionen

Name
chartArea

Ein Objekt mit Mitgliedern zum Konfigurieren der Position und Größe des Diagrammbereichs, in dem das Diagramm selbst gezeichnet wird, ohne Achse und Legenden. Es werden zwei Formate unterstützt: eine Zahl oder eine Zahl gefolgt von %. Eine einfache Zahl ist ein Wert in Pixeln, eine Zahl gefolgt von % ein Prozentsatz. Beispiel: chartArea:{left:20,top:0,width:'50%',height:'75%'}

Typ:Objekt
Standard:null
chartArea.bottom

Legt fest, wie weit das Diagramm vom unteren Rand entfernt ist.

Typ:Zahl oder String
Standard:automatisch
chartArea.left

Legt fest, wie weit das Diagramm von der linken Rahmenlinie entfernt ist.

Typ:Zahl oder String
Standard:automatisch
chartArea.right

Legt fest, wie weit das Diagramm von der rechten Rahmenlinie entfernt ist.

Typ:Zahl oder String
Standard:automatisch
chartArea.top

Legt fest, wie weit das Diagramm vom oberen Rand entfernt ist.

Typ:Zahl oder String
Standard:automatisch
chartArea.width

Diagrammbereichbreite.

Typ:Zahl oder String
Standard:automatisch
chartArea.height

Höhe des Diagrammbereichs.

Typ:Zahl oder String
Standard:automatisch
height

Höhe des Diagramms in Pixeln

Typ:Zahl
Standard:Höhe des beinhaltenden Elements
width

Breite des Diagramms in Pixeln.

Typ:Zahl
Standard:Breite des beinhaltenden Elements

Methoden

Methode
draw(data, options)

Zeichnet das Diagramm. Das Diagramm akzeptiert erst dann weitere Methodenaufrufe, nachdem das Ereignis ready ausgelöst wurde. Extended description.

Return Type: Kein
getAction(actionID)

Gibt das Kurzinfo-Aktionsobjekt mit dem angeforderten actionID zurück.

Rückgabetyp: Objekt
getBoundingBox(id)

Gibt ein Objekt zurück, das den linken und oberen Rand sowie die Breite und Höhe des Diagrammelements id enthält. Das Format für id ist noch nicht dokumentiert. Dies sind die Rückgabewerte von Event-Handlern. Hier einige Beispiele:

var cli = chart.getChartLayoutInterface();

Höhe des Diagrammbereichs
cli.getBoundingBox('chartarea').height
Breite des dritten Balkens in der ersten Reihe eines Balken- oder Säulendiagramms
cli.getBoundingBox('bar#0#2').width
Begrenzungsrahmen des fünften Keils eines Kreisdiagramms
cli.getBoundingBox('slice#4')
Begrenzungsrahmen der Diagrammdaten eines vertikalen Diagramms (z.B. Säulendiagramm):
cli.getBoundingBox('vAxis#0#gridline')
Begrenzungsrahmen der Diagrammdaten eines horizontalen Diagramms (z.B. Balken):
cli.getBoundingBox('hAxis#0#gridline')

Die Werte beziehen sich auf den Container des Diagramms. Rufen Sie dies nach dem Zeichnen des Diagramms auf.

Rückgabetyp: Objekt
getChartAreaBoundingBox()

Gibt ein Objekt zurück, das den linken und oberen Rand sowie die Breite und Höhe des Diagramminhalts enthält (ohne Labels und Legende):

var cli = chart.getChartLayoutInterface();

cli.getChartAreaBoundingBox().left
cli.getChartAreaBoundingBox().top
cli.getChartAreaBoundingBox().height
cli.getChartAreaBoundingBox().width

Die Werte beziehen sich auf den Container des Diagramms. Rufen Sie dies nach dem Zeichnen des Diagramms auf.

Rückgabetyp: Objekt
getChartLayoutInterface()

Gibt ein Objekt mit Informationen zur Platzierung des Diagramms und seiner Elemente auf dem Bildschirm zurück.

Die folgenden Methoden können für das zurückgegebene Objekt aufgerufen werden:

  • getBoundingBox
  • getChartAreaBoundingBox
  • getHAxisValue
  • getVAxisValue
  • getXLocation
  • getYLocation

Rufen Sie dies nach dem Zeichnen des Diagramms auf.

Rückgabetyp: Objekt
getHAxisValue(xPosition, optional_axis_index)

Gibt den horizontalen Datenwert bei xPosition zurück. Dies ist ein Pixelversatz vom linken Rand des Diagrammcontainers. Kann negativ sein.

Beispiel: chart.getChartLayoutInterface().getHAxisValue(400).

Rufen Sie dies nach dem Zeichnen des Diagramms auf.

Rückgabetyp: Zahl
getImageURI()

Gibt das Diagramm serialisiert als Bild-URI zurück.

Rufen Sie dies nach dem Zeichnen des Diagramms auf.

Weitere Informationen finden Sie unter PNG-Diagramme drucken.

Rückgabetyp: String
getSelection()

Gibt ein Array der ausgewählten Diagrammentitäten zurück. Für dieses Diagramm kann jeweils nur eine Entität ausgewählt werden. Extended description .

Rückgabetyp:Array von Auswahlelementen
getVAxisValue(yPosition, optional_axis_index)

Gibt den vertikalen Datenwert bei yPosition zurück. Dies ist ein Pixelversatz vom oberen Rand des Diagrammcontainers entfernt. Kann negativ sein.

Beispiel: chart.getChartLayoutInterface().getVAxisValue(300).

Rufen Sie dies nach dem Zeichnen des Diagramms auf.

Rückgabetyp: Zahl
getXLocation(dataValue, optional_axis_index)

Gibt die X-Koordinate des Pixels von dataValue relativ zum linken Rand des Diagrammcontainers zurück.

Beispiel: chart.getChartLayoutInterface().getXLocation(400).

Rufen Sie dies nach dem Zeichnen des Diagramms auf.

Rückgabetyp: Zahl
getYLocation(dataValue, optional_axis_index)

Gibt die Y-Koordinate des Pixels von dataValue relativ zum oberen Rand des Diagrammcontainers zurück.

Beispiel: chart.getChartLayoutInterface().getYLocation(300).

Rufen Sie dies nach dem Zeichnen des Diagramms auf.

Rückgabetyp: Zahl
removeAction(actionID)

Entfernt die Kurzinfo-Aktion mit dem angeforderten actionID aus dem Diagramm.

Rückgabetyp: none
setAction(action)

Legt eine Kurzinfo-Aktion fest, die ausgeführt werden soll, wenn der Nutzer auf den Aktionstext klickt.

Die Methode setAction verwendet ein Objekt als Aktionsparameter. Für dieses Objekt müssen drei Attribute angegeben werden: id für die ID der festgelegten Aktion, text für den Text, der in der Kurzinfo für die Aktion angezeigt werden soll, und action für die Funktion, die ausgeführt wird, wenn ein Nutzer auf den Aktionstext klickt.

Alle Kurzinfo-Aktionen sollten vor dem Aufrufen der draw()-Methode des Diagramms festgelegt werden. Erweiterte Beschreibung:

Rückgabetyp: none
setSelection()

Wählt die angegebenen Diagrammentitäten aus. Verwirft die vorherige Auswahl. Für dieses Diagramm kann jeweils nur eine Entität ausgewählt werden. Extended description .

Return Type: Kein
clearChart()

Löscht das Diagramm und gibt alle zugewiesenen Ressourcen frei.

Return Type: Kein

Ereignisse

Weitere Informationen zur Verwendung dieser Ereignisse finden Sie unter Grundlegende Interaktivität, Ereignisse verarbeiten und Auslösen von Ereignissen.

Name
animationfinish

Wird ausgelöst, wenn die Übergangsanimation abgeschlossen ist.

Properties:keine
click

Wird ausgelöst, wenn der Nutzer auf das Diagramm klickt Damit können Sie feststellen, wann auf Titel, Datenelemente, Legendeneinträge, Achsen, Gitternetzlinien oder Labels geklickt wird.

Eigenschaften: targetID
error

Wird ausgelöst, wenn beim Versuch, das Diagramm zu rendern, ein Fehler auftritt.

Properties (Eigenschaften): id, message, message
legendpagination

Wird ausgelöst, wenn der Nutzer auf Pfeile zum Seitenumbruch für die Legende klickt. Gibt den nullbasierten Seitenindex der aktuellen Legende und die Gesamtzahl der Seiten zurück.

Eigenschaften: currentPageIndex, totalPages
onmouseover

Wird ausgelöst, wenn der Nutzer den Mauszeiger auf eine visuelle Entität bewegt. Gibt die Zeilen- und Spaltenindexe des entsprechenden Datentabellenelements zurück.

Eigenschaften: Zeile, Spalte
onmouseout

Wird ausgelöst, wenn der Nutzer den Mauszeiger von einer visuellen Entität entfernt Gibt die Zeilen- und Spaltenindexe des entsprechenden Datentabellenelements zurück.

Eigenschaften: Zeile, Spalte
ready

Das Diagramm ist bereit für externe Methodenaufrufe. Wenn Sie mit dem Diagramm interagieren und Methoden aufrufen möchten, nachdem Sie es gezeichnet haben, sollten Sie einen Listener für dieses Ereignis einrichten, bevor Sie die Methode draw aufrufen. Der Aufruf muss erst erfolgen, nachdem das Ereignis ausgelöst wurde.

Properties:keine
select

Wird ausgelöst, wenn der Nutzer auf eine visuelle Entität klickt. Wenn Sie wissen möchten, was ausgewählt wurde, rufen Sie getSelection() auf.

Properties:keine

Datenrichtlinie

Sämtlicher Code und alle Daten werden im Browser verarbeitet und gerendert. Es werden keine Daten an einen Server gesendet.