d3 滑块更改 csv 列
d3 slider to change csv column
我有一个范围从 2001 到 2016 的 d3 滑块和一个包含列名和 no_2001 到 no_2016 的 csv 文件。 csv 在 d3.queue 中与 json 文件一起调用,以构建多年来变化的等值线图。
我的问题是通过拖动滑块更改 csv 文件的列。谁能帮忙?谢谢!
这就是我目前所拥有的。在队列函数中“+d.no_2015”必须改变,但是如果我用“+d.no_2015”替换它我定义的"column"不起作用。
<h2>Year: <span id="year">2016</span></h2>
<div id="slider"></div>
<script>
function csvColumn(data){
column = "no_" + data;
return column // this does not work
};
d3.select('#slider').call(d3.slider()
.min(2001)
.max(2016)
.value(2016)
.step(1)
.axis(d3.svg.axis().tickFormat(d3.format(".0f")).ticks(16))
.on("slide", function(evt, value) {
d3.select('#year').text(value);
csvColumn(value);
}));
var rateById = d3.map();
d3_queue.queue()
.defer(d3.json, "de_landkreis.json")
.defer(d3.csv, "maserndaten.csv", function(d) {rateById.set(d.name, +d.no_2015);}) //here the slider has to act. +d.column does not work.
.await(showData);
function showData(error, de_landkreis) { ... }
</script>
好的,如果我做对了,您应该更改您的代码,以便使用您的滑块定义的列来填充您的地图。我认为这可以解决问题:
<h2>Year: <span id="year">2016</span></h2>
<div id="slider"></div>
<script>
// This is the default value
var selectedColumn = "no_2014";
function csvColumn(data){
return "no_" + data;
};
d3.select('#slider').call(
d3.slider()
.min(2001)
.max(2016)
.value(2016)
.step(1)
.axis(d3.svg.axis().tickFormat(d3.format(".0f")).ticks(16))
.on("slide", function(evt, value) {
d3.select('#year').text(value);
selectedColumn = csvColumn(value);
})
);
var rateById = d3.map();
d3_queue.queue()
.defer(d3.json, "de_landkreis.json")
.defer(d3.csv, "maserndaten.csv", function(d) {
rateById.set(d.name, +d[csvColumn(selectedValue)]);
})
.await(showData);
function showData(error, de_landkreis) { ... }
</script>
当然,您需要以一种方式连接它,即更改滑块会触发使用不同的列作为源重新绘制数据。但是第一部分已经解决了。
我有一个范围从 2001 到 2016 的 d3 滑块和一个包含列名和 no_2001 到 no_2016 的 csv 文件。 csv 在 d3.queue 中与 json 文件一起调用,以构建多年来变化的等值线图。
我的问题是通过拖动滑块更改 csv 文件的列。谁能帮忙?谢谢!
这就是我目前所拥有的。在队列函数中“+d.no_2015”必须改变,但是如果我用“+d.no_2015”替换它我定义的"column"不起作用。
<h2>Year: <span id="year">2016</span></h2>
<div id="slider"></div>
<script>
function csvColumn(data){
column = "no_" + data;
return column // this does not work
};
d3.select('#slider').call(d3.slider()
.min(2001)
.max(2016)
.value(2016)
.step(1)
.axis(d3.svg.axis().tickFormat(d3.format(".0f")).ticks(16))
.on("slide", function(evt, value) {
d3.select('#year').text(value);
csvColumn(value);
}));
var rateById = d3.map();
d3_queue.queue()
.defer(d3.json, "de_landkreis.json")
.defer(d3.csv, "maserndaten.csv", function(d) {rateById.set(d.name, +d.no_2015);}) //here the slider has to act. +d.column does not work.
.await(showData);
function showData(error, de_landkreis) { ... }
</script>
好的,如果我做对了,您应该更改您的代码,以便使用您的滑块定义的列来填充您的地图。我认为这可以解决问题:
<h2>Year: <span id="year">2016</span></h2>
<div id="slider"></div>
<script>
// This is the default value
var selectedColumn = "no_2014";
function csvColumn(data){
return "no_" + data;
};
d3.select('#slider').call(
d3.slider()
.min(2001)
.max(2016)
.value(2016)
.step(1)
.axis(d3.svg.axis().tickFormat(d3.format(".0f")).ticks(16))
.on("slide", function(evt, value) {
d3.select('#year').text(value);
selectedColumn = csvColumn(value);
})
);
var rateById = d3.map();
d3_queue.queue()
.defer(d3.json, "de_landkreis.json")
.defer(d3.csv, "maserndaten.csv", function(d) {
rateById.set(d.name, +d[csvColumn(selectedValue)]);
})
.await(showData);
function showData(error, de_landkreis) { ... }
</script>
当然,您需要以一种方式连接它,即更改滑块会触发使用不同的列作为源重新绘制数据。但是第一部分已经解决了。