Ich bin derzeit eine Choroplethenkarte in Angular 2 mit dem folgend als Leitfaden Aufbau: http://cartographicperspectives.org/index.php/journal/article/view/cp78-sack-et-al/1359Verständnis d3.scaleQuantile() für Choroplethenkarte
Bisher funktioniert alles gut, außer die d3.scaleQuantile().range()
Funktion.
In d3 Version 3 war die obige Funktion d3.scale.quantile().range()
.
Im obigen Karten-Tutorial, das die Version 3 verwendet, akzeptiert d3.scale.quantile().range()
eine Liste von Farben: [“#D4B9DA”,“#C994C7”, “#DF65B0”, “#DD1C77”, “#980043”]
. Doch dies scheint nicht auf die neue d3.scaleQuantile().range()
Funktion in Version 4 anzuwenden, wenn ich die gleiche Liste setzen in.
Die Konsole einen Fehler von Type 'string' is not assignable to type 'number'.)
und in WebStorm gibt, sagt der Fehler Argument types do not match parameters
Wenn jemand kann mir in die richtige Richtung zeigen, wie man die Entfernungsfunktion benutzt, um die Farben einzustellen, ich würde es begrüßen. Relevante Teile des Codes unten.
colorScale(csvData: any): any {
var range = [];
var color = d3.scaleQuantile()
.range(range);
var domainArray = [];
for (var i in csvData){
domainArray.push(Number(csvData[i]["PROP"]));
};
//pass array of expressed values as domain
color.domain(domainArray);
return color; //return the color scale generator
}
choropleth(d: any, recolorMap: any): any{
//get data value
var value = d.properties["PROP"];
//if value exists, assign it a color; otherwise assign gray
if (value) {
return recolorMap(value);
} else {
return "#ccc";
};
};
buildMap(csvData: any){
//code removed to keep short
var recolorMap = this.colorScale(csvData);
this.g = this.svg.append("g")
.selectAll("path")
.data(xFeatures)
.enter()
.append("path")
.attr("d", this.geoPath)
.style("fill", (d) => { //color enumeration units
return this.choropleth(d, recolorMap)
});
}
Was ist der Wert von 'csvData' ist? Es sieht so aus, als könnte ein Parsingfehler auftreten, weil Sie 'csvData [i] ['PROP']' in eine Zahl konvertieren. –
Die 'csvData'-Variable ist die CSV-Daten mit den Namen und Nummern, die auf jeden Zustand angewendet werden. Ich schaute durch und machte eine Reihe von Konsolen-Log-Anweisungen, um zu sehen, was mitgereicht wurde und es ausgecheckt hat. Es ist die Bereichsfunktion, die scheinbar nur ein Array von Zahlen und kein Array von Strings benötigt. – mikey8989
Für den von Ihnen geposteten Code-Block rufen Sie 'd3.scaleQuantile(). Range (range)' auf, aber 'range' ist ein leeres Array an diesem Punkt. Ist das der Punkt, an dem Probleme auftreten? Oder ist es woanders, für das Sie den Code nicht gepostet haben? –