d3.js 相当于 R 数据框中的列
d3.js equivalent to columns in R dataframes
我有一些数据以这种格式存储(除了很多情况更多):
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" 是 "team" 所有级别的数组(即本例中的 ["team1","team2"])。
"b" 是与 "a" 长度相同的序数颜色数组。
colourScale() 应该将 "team" 值作为输入,并且 return 每个团队的独特颜色。
如何创建 "a" 和 "b"?在 javascript 或 d3.js 中是否有等同于 R's levels(data[ ,"team"]) 的东西?
这不完全是您的解决方案,因为您没有明确找到您指定的 a
或 b
,但我找到了
var colourScale = d3.scale.category10();
function colour(d) { return d.team; }
然后在要着色的对象上,绑定到适当的数据,链
.style("fill", function(d) { return colourScale(colour(d)); });
具有我假设您正在搜索的效果。希望这有帮助。
我认为您还需要执行一些额外的步骤。您首先需要创建一组 'unique' 可能的域值。然后您可以创建一个将每个值映射到一种颜色的函数。可能是这样的:
// 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);})
希望对您有所帮助。
我有一些数据以这种格式存储(除了很多情况更多):
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" 是 "team" 所有级别的数组(即本例中的 ["team1","team2"])。 "b" 是与 "a" 长度相同的序数颜色数组。 colourScale() 应该将 "team" 值作为输入,并且 return 每个团队的独特颜色。
如何创建 "a" 和 "b"?在 javascript 或 d3.js 中是否有等同于 R's levels(data[ ,"team"]) 的东西?
这不完全是您的解决方案,因为您没有明确找到您指定的 a
或 b
,但我找到了
var colourScale = d3.scale.category10();
function colour(d) { return d.team; }
然后在要着色的对象上,绑定到适当的数据,链
.style("fill", function(d) { return colourScale(colour(d)); });
具有我假设您正在搜索的效果。希望这有帮助。
我认为您还需要执行一些额外的步骤。您首先需要创建一组 'unique' 可能的域值。然后您可以创建一个将每个值映射到一种颜色的函数。可能是这样的:
// 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);})
希望对您有所帮助。