26

Ich habe verschiedene Dokumentation und ähnliche Fragen hier angesehen, kann aber nicht scheinen, die besondere Lösung zu finden. Entschuldigung, wenn ich etwas Offensichtliches verpasst habe oder diese Frage wiederholt habe!JavaScript Chart.js - Benutzerdefinierte Datenformatierung zur Anzeige auf Tooltip

Als Hintergrundinformationen habe ich 4 Grafiken mit dem Chart.js Plugin implementiert und die benötigten Daten mit PHP aus einer Datenbank übergeben. Das funktioniert alles korrekt und ist in Ordnung.

Mein Problem ist, ich muss die Daten in den Tooltips als formatierte Daten aka anzeigen. als numerisch mit%. Zum Beispiel ist eine meiner Daten aus der Datenbank -0.17222. Ich habe es als Prozentsatz formatiert, um in meiner Tabelle angezeigt zu werden, und alles ist gut. Wenn Sie jedoch die Daten für das Balkendiagramm "chart.js" festlegen, fehlt diesen Daten offensichtlich die Formatierung, und sie wird als "0.17222" angezeigt, was ich nicht möchte.

Sorry, ich wollte ein Bild posten, aber mein Ruf ist zu dumm!

packe ich Daten aus der Datenbank, dann in meinen Tisch gesetzt:

var kpiRex = new Handsontable(example1, { 
    data: getRexData(), 

Dann füttere ich diese Daten wie so im Abschnitt Diagramm:

data: kpiRex.getDataAtRow(3) 

Jede Hilfe wäre toll! Ich bin seit Stunden daran fest und es ist wahrscheinlich etwas sehr einfaches, das ich übersehe.

Antwort

26

Sie möchten eine benutzerdefinierte Tooltip Vorlage in Ihrem Diagramm Optionen angeben, wie folgt aus:

// String - Template string for single tooltips 
tooltipTemplate: "<%if (label){%><%=label %>: <%}%><%= value + ' %' %>", 
// String - Template string for multiple tooltips 
multiTooltipTemplate: "<%= value + ' %' %>", 

diese Weise erhalten Sie einen ‚%‘ Zeichen nach dem Werte hinzufügen können, wenn das ist, was Sie wollen.

Hier ist a jsfiddle to illustrate this.

Beachten Sie, dass tooltipTemplate gilt, wenn Sie nur einen Datensatz haben, multiTooltipTemplate gilt, wenn Sie mehrere Datensätze haben.

Diese Optionen werden in der global chart configuration section of the documentation erwähnt. Sieh es dir an, es lohnt sich, nach all den anderen Optionen zu suchen, die dort angepasst werden können.

Beachten Sie, dass Ihre Datensätze nur numerische Werte enthalten sollten. (Keine% Zeichen oder andere Sachen dort).

+2

Massives danke! Ich habe das TooltipTemplate zuvor verwendet, aber ich muss das multiTooltipTemplate benötigt haben, da ich 4 Diagramme habe. Keine Ahnung, wie ich diese Option verpasst habe! Es funktioniert jetzt! Nochmals vielen Dank, dass du dir die Zeit genommen hast. –

+0

Gern geschehen. Ich bin froh, dass das geholfen hat. – rtome

+0

Vielen Dank für die jsfiddle, um es wirklich nützlich zu veranschaulichen. Ich füge Währungsformatierung mit diesem Beispiel hinzu. –

9

können Sie tooltipTemplate geben eine Funktion, und formatieren Sie den Tooltip, wie Sie wollen:

tooltipTemplate: function(v) {return someFunction(v.value);} 
multiTooltipTemplate: function(v) {return someOtherFunction(v.value);} 

Diese gegeben ‚v‘ Argumente viele Informationen neben dem ‚Wert‘ Eigenschaft enthalten. Sie können einen 'Debugger' in diese Funktion einfügen und diese selbst überprüfen.

+0

wie Magie funktioniert! Vielen Dank! – prsnca

+0

was soll die "someOtherFunction()" zurückgeben? Eine Stringvorlage wie "<% DatasetLabel - Wert%>", String oder etwas anderes? Oder genauer, was sollte es tun? Etwas zurückgeben oder Eigenschaften des angegebenen Parameters ändern? – SomethingOn

+0

@SomethingOn SomeOtherFunction() sollte die Zeichenfolge zurückgeben, die in der QuickInfo angezeigt werden soll. keine Vorlage, nur die Zeichenfolge. Sie können v.value beliebig manipulieren, solange Sie eine Zeichenfolge zurückgeben. Es soll nicht v ändern, das scheint gefährlich zu sein. –

30

In chart.js 2.1.6 habe ich so etwas wie dieses (in Typoskript):

let that = this; 
    options = { 
    legend: { 
     display: false, 
     responsive: false 
    }, 
    tooltips: { 
     callbacks: { 
     label: function(tooltipItem, data) { 
      let account: Account = that.accounts[tooltipItem.index]; 
      return account.accountNumber+":"+account.balance+"€"; 
     } 
     } 
    } 
    } 
+0

Danke für diesen Kumpel –

+0

perfekte Antwort! – Unbreakable

+0

Können Sie mir helfen, dies mit zu tun über einen prozentualen Anteil am Ende des Wertes wie die erste Antwort für das Hinzufügen, aber für Version 2+? Vielen Dank. Ich bin ein JS Neuling ... – jaminroe

59

Für chart.js 2.0+, das hat sich geändert (nicht mehr tooltipTemplate/multiTooltipTemplate).Für diejenigen, die nur den aktuellen, unformatierten Wert zugreifen mögen und starten Sie es zwicken, ist der Standard-Tooltip die gleiche wie:

options: { 
    tooltips: { 
     callbacks: { 
      label: function(tooltipItem, data) { 
       return tooltipItem.yLabel; 
      } 
     } 
    } 
} 

D.h. Sie Änderungen an tooltipItem.yLabel zurückkehren können, die den Wert der y-Achse hält. In meinem Fall wollte ich ein Dollarzeichen, Rundung und von tausenden Komma für eine finanzielle Chart addieren, so dass ich verwendet:

options: { 
    tooltips: { 
     callbacks: { 
      label: function(tooltipItem, data) { 
       return "$" + Number(tooltipItem.yLabel).toFixed(0).replace(/./g, function(c, i, a) { 
        return i > 0 && c !== "." && (a.length - i) % 3 === 0 ? "," + c : c; 
       }); 
      } 
     } 
    } 
} 
+0

das ist schön, aber es entfernt die Serie 'Labels – RafaelTSCS

+0

ich Callbacks verwendet, um meine Tooltip wie folgt zu erstellen. Callbacks: { Label: Funktion (TooltipItem, Daten) { Rückgabe TooltipItem. yLabel + '%'; }, aber es zeigt auch x-Achsen-Wert .. Ich mag den x-Achsen-Wert anzuzeigen, wie well..How x-Achsen-Wert von meinem Tooltip – Rajiv

+1

@Kyrth .Ja es noch verstecken nur den yAchse Wert anzuzeigen.? –

-1
tooltips: { 
      enabled: true, 
        mode: 'single', 
        callbacks: { 
        label: function(tooltipItems, data) { 
         return data.datasets[tooltipItems.datasetIndex].label+": "+tooltipItems.yLabel; 
        } 
        } 
       } 
+1

sollten Sie die richtige Code-Schnipsel hinzufügen und vor allen Dingen sollten Sie lieber die Fehler oder ein Problem im Skript des OP weisen darauf hin, als nur Code hinzufügen und die Antwort zu veröffentlichen, sollten Sie mehr beschreibend –