2013-04-24 3 views

Antwort

27

Um Ihre eigenen Farben zu verwenden, müssen Sie die vorhandenen Farben überschreiben, ich möchte lieber nicht mit dem Originalcode basteln.

Also das ist was ich getan habe.

var myColors = ["#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd", "#8c564b", "#e377c2", "#7f7f7f", "#bcbd22", "#17becf"]; 
    d3.scale.myColors = function() { 
     return d3.scale.ordinal().range(myColors); 
    }; 

    nv.addGraph(function() { 
     var chart = nv.models.pieChart() 
      .x(function(d) { return d.label }) 
      .y(function(d) { return d.value }) 
      .showLabels(true).color(d3.scale.myColors().range()); 

     d3.select("#chart svg") 
      .datum(data) 
      .transition().duration(1200) 
      .call(chart); 

     return chart; 
    }); 

Alles, was ich war .color(d3.scale.myColors().range())


UPDATE :

überprüfen Antwort von Christopher Chiche, für die perfekte Lösung hinzugefügt haben.

.color(['blue', 'green', 'yellow']) 

Hoffe, das hilft.

+0

Ich benutze dies, aber ich habe ein Problem, wenn ich die Metriken des Diagramms ändern und neu zeichnen (mit neuen Farben, ich habe eine Funktion, die Farben basierend auf dem Etikett berechnet), zeichnet das Diagramm falsche Farben. wenn ich klicke, um einige Werte anzuzeigen/auszublenden, werden manchmal neu gezeichnet, wie sie sein sollten, manchmal werden sie falsch gezeichnet. Haben Sie eine Idee, warum das so ist? Das passiert nur in Tortendiagrammen. – Nikola

+0

Ich versuche mein Bestes, um dies zu erklären, sagen Sie zum Beispiel, dass Sie 5 Kategorien beim Laden haben, das Diagramm nimmt die ersten 5 Farben des Arrays. So wird Ihre Farbe 1 immer dem ersten Element der Daten zugewiesen. Dies ist möglicherweise nicht der beste Weg, aber versuchen Sie es mit einem Array und ordnen Sie die Farbe gegen die Torten, so können Sie die onclick Funktionen auf der ledgend verwenden und erhalten, welche Elemente aktiv sind und welche nicht, es gibt ein Array mit den Positionen zurück. Sie können das verwenden, um herauszufiltern, welche Farben Sie übergeben müssen, wenn Sie das Diagramm neu zeichnen. – shabeer90

+0

nein nein das Problem ist, dass ich etwas anderes tun möchte, zum Beispiel ich eine Reihe von Daten mit verschiedenen Feldern für ex. (IP, Land und einige mehr), wenn ich die IP-Metrik zeige (ich habe 4 verschiedene ips) gruppiere ich die Daten, erstelle die Farben für den Kuchen und rende ihn. wenn ich von IP-Metrik zu Land ändere, aggregiere ich die Daten erneut (ich bekomme 10 verschiedene Länder) ich erstelle die Farben für sie, und zeichne dann den Kuchen neu, zuerst rendere es ok, es nimmt die neuen Farben (diese Farben haben nichts) zu tun mit den Farben der IP - Torte), aber wenn ich Teile des Kuchens ein- oder auszeige, werden Farben von der IP-Torte gezeigt – Nikola

43

Sie können Farben hinzufügen, indem Sie ein Array an die Option 'color()' übergeben. Also einfach hinzufügen:

.color(['blue', 'green', 'yellow']) 

Wenn Sie diese Farben für 3 Elemente verwenden möchten.

Hinweis: Wenn Sie mehr als 3 Elemente haben, werden einige Farben mehrfach verwendet.

+0

Wo müssen wir Farbe hinzufügen() ;? – GOK

+0

@GOK Sie müssen 'color' in' chart' einfügen. Also gibt es 'chart.color (['blau', 'grün', 'rot'])'. –

47

Wenn Sie Kuchen bestimmte Farbe verwenden möchten

chart.color(function(d){ 
    return d.data.color 
}); 

Dann organisieren Sie Ihre Daten wie:

[ 
    { 
    key: "Cumulative Return", 
    values: [ 
     { 
     "label": "One", 
     "value" : 29.765957771107, 
     "color" : "#8c564b" 
     } , 
     { 
     "label": "Three", 
     "value" : 32.807804682612, 
     "color" : "#e377c2" 
     } 
    ] 
    } 
] 
+1

Toller Tipp, rettete mich ziemlich lange. Vielen Dank. –

+1

Dies ist die beste Antwort, es verwendet d3-Funktionalität und weil in meinem speziellen Fall die Farbwerte in einer Datenbank gespeichert sind, so kann ich nicht hart auf meine js-Datei wie in Christopher's Antwort zu codieren. – svarog

+0

Ich habe 'return d.color' benutzt, um es zu benutzen. – rikpg

0

Hier ist eine Notiz, die mich bekam, war ich Einstellung chart.color innerhalb von nv.addGraph, das funktionierte nicht richtig und würde stattdessen die Standardeinstellungen verwenden. Ich stellte es dann draußen und es hat gut funktioniert.

0

Ich verwende .color(function(d) {return [d.value > 0 ? 'blue' : 'red']});, um die Farbe je nach Datenwert zu ändern.

Hoffe, dass diese jemandem helfen.

0

Hier ist die Typescript-Lösung, die der JS-Version ähnelt. Angenommen, Sie sind mit 10 verschiedenen Farben eine Top 10 Ihrer Ergebnisse wollen:

Hier werde ich Ihnen das Beispiel, das für meine PieChart oder MultiBarChart arbeiten

  • Erstellen Sie eine globale Palette von Farben wie Farben = [ "# D9D9D9", "# 4B11A6", ....];
  • hat die Daten in einem Objekt formatiert werden: MyGraph {key: „Titel“, Werte: {Ströme drücken}}
  • Dann, wenn Sie Ihre Datentabelle Erstellen Drücken Sie einfach die Farbe für jeden Stream:

let stream = {}; Lassen Sie Daten = []; Lass i = 0;

dataTable.forEach((period) => { 
    stream = { 'label': period.key, 'value': period.value, 'color': this.colors[i] }; 

if(period.value !== 0) { 
data.push(stream);} 
i++; 
}); 
this.myGraph = data; 

Die if Zustand gerade dort ist leer Stück in der Grafik

0

I unten Konzept verwendet habe, um zu verhindern benutzerdefinierte Farbe hinzuzufügen:

// for define variable of custom colors 
var colors = ["red", "green", "blue"]; 
... 
chart { 
    color: function(d,i){ 
     return (d.data && d.data.color) || colors[i % colors.length] 
    } 
} 

Für dynamische Farbe basierend auf JSON Daten nur hinzufügen New json obj color wie unter Konzept ..

// or set custom colors directly in the data 
data = [{ 
     key: "One", 
     y: 5, 
     color: "yellow" 
    },{ 
     key: "Two", 
     y: 2, 
     color: "gray" 
    },{ 
     key: "Three", 
     y: 9 
    }, 
    ... 
];