У меня есть два выпадающих меню.Один раскрывающийся список (содержащий количественные переменные) определяет размер кружков, а другой раскрывающийся список (содержащий категориальные переменные), который определяет цвет круга, созданного на карте листовки.Когда я выбираю переменную размера, я хочу, чтобы переменная цвета была зафиксирована в той переменной, которую он выбрал ранее.«sizeropdown» и «colordropdown» содержат имена переменных, а sizeExtents содержит минимальные и максимальные значения количественных переменных, а colorextent содержит уникальные категории.
var dropDown_size = d3.select("#sizeSection")
.selectAll("option").data(sizedropDown)
.enter().append("option")
.text(function(d) {return d ;} )
.attr("value", function(d,i) { return i;} );
var dropDown_color = d3.select("#colorSection")
.selectAll("option").data(colordropDown)
.enter().append("option")
.text(function(d) { return d;} )
.attr("value", function(d,i) {return i;} );
d3.select('#sizeSection')
.on("change", function () {
var section_color = 0;
var sect_size = document.getElementById("sizeSection");
var section_size = sect_size.options[sect_size.selectedIndex].value;
updateSubset(all_data.features,section_size,section_color);
});
d3.select('#colorSection')
.on("change", function () {
var section_size = 0;
var sect_color = document.getElementById("colorSection");
var section_color = sect_color.options[sect_color.selectedIndex].value;
updateSubset(all_data.features,section_size,section_color);
});
Моя функция updateSubset работает на карте.Функции подмножества обновления выглядят так:
function updateSubset(subset,section_size,section_color) {
var size_name = sizedropDown[section_size];
var size_extent = sizeExtents[section_size];
var sizeScale = d3.scale.sqrt()
.domain(size_extent)
.range([5,15]);
var color_name = colordropDown[section_color]
var color_extent = colorExtents[section_color];
var c10 = function(d){
var colors = ["#3366cc", "#dc3912", "#ff9900", "#109618", "#990099",
"#0099c6", "#dd4477", "#66aa00", "#b82e2e", "#316395",
"#994499", "#22aa99", "#aaaa11", "#6633cc", "#e67300",
"#8b0707", "#651067", "#329262", "#5574a6", "#3b3eac"];
return colors.slice(0,d)};
var ordinalScale = d3.scale.ordinal()
.domain(color_extent)
.range(c10(color_extent.length));
var bounds = path.bounds({
type: "FeatureCollection",
features: subset
});
var topLeft = bounds[0];
var bottomRight = bounds[1];
var arc = d3.svg.symbol().type('circle');
svg.attr("width", bottomRight[0] - topLeft[0])
.attr("height", bottomRight[1] - topLeft[1])
.style("left", topLeft[0] + "px")
.style("top", topLeft[1] + "px");
g.attr("transform", "translate(" + -topLeft[0] + "," + -topLeft[1] + ")");
var points = g.selectAll("path")
.data(subset,function(d){return d.geometry.coordinates;});
points.enter().append("path");
points.attr("d", path).attr("class", "points");
points.attr("d",path.pointRadius(function(d) {
return sizeScale(d.properties[size_name]);})
);
points.style("fill-opacity", 0.4);
points.style("fill", function(d){
return ordinalScale(d.properties[color_name]);}
);
}
Я не мог понять, как сохранить выбор одного фильтра, когда другой меняется.