我有一些以这种格式存储的数据(除了很多情况外):
var data = [
{"name":"John", "team":"team1"},
{"name":"Megan", "team":"team2"},
{"name":"Rupert", "team":"team2"},
{"name":"Albert", "team":"team1"}
];
我想创建这个:
var colourScale = d3.scale.ordinal()
.range(a)
.domain(b)
“a”是所有级别“团队”的数组(在这种情况下为[“team1”,“team2”])。 “b”是与“a”长度相同的序数颜色数组。 colourScale()应该将“团队”值作为输入,并为每个团队返回一种独特的颜色。
如何创建“a”和“b”?在javascript或d3.js中是否有与R的级别(数据[,“团队”])相当的东西?
答案 0 :(得分:1)
它并不完全是您的解决方案,因为您没有明确找到指定的a
或b
,但我找到了
var colourScale = d3.scale.category10();
function colour(d) { return d.team; }
并在要着色的对象上,绑定到相应的数据链
.style("fill", function(d) { return colourScale(colour(d)); });
具有我假设您正在搜索的效果。希望这会有所帮助。
答案 1 :(得分:0)
我认为您需要做一些额外的步骤。您首先需要创建一个独特的'一组可能的域值。然后,您可以创建一个将每个值映射到颜色的函数。也许是这样的事情:
// A function to get unique values, can be optimized further
function unique(x) {
return x.reverse().filter(function (e, i, x) {return x.indexOf(e, i+1) === -1;}).reverse();
}
var data = [
{"name":"John", "team":"team1"},
{"name":"Megan", "team":"team2"},
{"name":"Rupert", "team":"team2"},
{"name":"Albert", "team":"team1"}
];
// An arbitrary set of colors
colors = ['#005824','#1A693B','#347B53','#4F8D6B','#699F83','#83B09B','#9EC2B3','#B8D4CB','#D2E6E3','#EDF8FB','#FFFFFF','#F1EEF6','#E6D3E1','#DBB9CD','#D19EB9','#C684A4','#BB6990','#B14F7C','#A63467','#9B1A53','#91003F']
//Create the ordinary scale based on your color set above
colorScale= d3.scale.ordinal()
.domain(unique(data.map(function(d){return d.team;})))
.range(colors)
然后您可以通过以下方式访问颜色:
.style("fill",function(d){return colorScale(d.team);})
希望这有帮助。