将颜色绑定到 d3 图表中的类别
Bind colors to categories in d3 charts
我有这样的数据:
groupA = [{'race': 'Black', 'count': 7},
{'race': 'White', 'count': 8},
{'race': 'unknown', 'count': 3}]
groupB = [{'race': 'White', 'count': 5},
{'race': 'Asian', 'count': 8},
{'race': 'Black', 'count': 6},
{'race': 'unknown', 'count': 4}]
groupC = [{'race': 'Black', 'count': 5},
{'race': 'White', 'count': 8},
{'race': 'unknown', 'count': 10},
{'race':'Asian', 'count':5}
{'race': 'Hispanic', 'count': 4}]
//...and so on
我在 d3 中使用它来构建饼图。我有一个 html select 选项来选择要在饼图上显示的组数据。
一切正常,只是我希望每次呈现图表时都使用相同的颜色来表示相同的类别。有 5 个种族类别,但并非每个类别都在每个组中都有代表。
我这样定义颜色:
var race_color = d3.scale.ordinal()
.range(["#1B9E77", "#D95F02", "#7570B3", "#E7298A", "#66A61E"]);
我正在用它来填充切片:
arcs.append("svg:path")
.attr("fill", function(d, i){
return race_color(i);
})
.attr("d", function (d) {
return arc(d);
})
但我需要做的是将相同的种族类别绑定到相同的颜色切片。我该怎么做?
使用索引位置 i
,如 race_color(i)
中那样不起作用,因为有时,当 i
为 0 时,种族是 "Black"
(组 A、C) ,在另一种情况下是 "White"
(B 组)。
相反,根据实际比赛值 race_color(d.race)
为颜色设置键值,这在各组中保持一致。
例如,请这样准备颜色table。
var color_table = {
'Black' : '#1B9E77',
'White' : '#D95F02',
'Asian' : '#7570B3',
'Hispanic': '#E7298A',
'unknown' : '#66A61E'
};
然后像这样修改你的代码。
arcs.append("svg:path")
.attr("fill", function(d, i){
return color_table[d.race]; // modified
})
.attr("d", function (d) {
return arc(d);
})
我有这样的数据:
groupA = [{'race': 'Black', 'count': 7},
{'race': 'White', 'count': 8},
{'race': 'unknown', 'count': 3}]
groupB = [{'race': 'White', 'count': 5},
{'race': 'Asian', 'count': 8},
{'race': 'Black', 'count': 6},
{'race': 'unknown', 'count': 4}]
groupC = [{'race': 'Black', 'count': 5},
{'race': 'White', 'count': 8},
{'race': 'unknown', 'count': 10},
{'race':'Asian', 'count':5}
{'race': 'Hispanic', 'count': 4}]
//...and so on
我在 d3 中使用它来构建饼图。我有一个 html select 选项来选择要在饼图上显示的组数据。 一切正常,只是我希望每次呈现图表时都使用相同的颜色来表示相同的类别。有 5 个种族类别,但并非每个类别都在每个组中都有代表。
我这样定义颜色:
var race_color = d3.scale.ordinal()
.range(["#1B9E77", "#D95F02", "#7570B3", "#E7298A", "#66A61E"]);
我正在用它来填充切片:
arcs.append("svg:path")
.attr("fill", function(d, i){
return race_color(i);
})
.attr("d", function (d) {
return arc(d);
})
但我需要做的是将相同的种族类别绑定到相同的颜色切片。我该怎么做?
使用索引位置 i
,如 race_color(i)
中那样不起作用,因为有时,当 i
为 0 时,种族是 "Black"
(组 A、C) ,在另一种情况下是 "White"
(B 组)。
相反,根据实际比赛值 race_color(d.race)
为颜色设置键值,这在各组中保持一致。
例如,请这样准备颜色table。
var color_table = {
'Black' : '#1B9E77',
'White' : '#D95F02',
'Asian' : '#7570B3',
'Hispanic': '#E7298A',
'unknown' : '#66A61E'
};
然后像这样修改你的代码。
arcs.append("svg:path")
.attr("fill", function(d, i){
return color_table[d.race]; // modified
})
.attr("d", function (d) {
return arc(d);
})