我正在尝试取消y值为>的行5000。 这是包含来自csv文件的所有数据的图表:
http://dtech.id.lv/d3/origin.html
这是我尝试用if语句修改forEach函数:
http://dtech.id.lv/d3/modif.html
// Get the data
d3.csv("data.csv", function(error, data) {
data.forEach(function(d) {
if (d.close < 5000) {
less5000++;
d.close = +d.close;
d.date = parseDate(d.date);
}
if (d.close > 5000) {
over5000++;
}
total++;
});
有些东西不在这里,我无法弄清楚如何正确地写这个。 有人可以指点我这样做的正确方法吗? 谢谢!
答案 0 :(得分:1)
错误发生在其他地方:
您的几个数据条目的日期格式错误,因此您的valueline方法中的x(d.date)
会返回无法显示的NaN,并且d3会崩溃(请参阅http://dtech.id.lv/d3/modif.html处的JS控制台)。
这就是你的第一个数据条目的样子,这很好:{dd: "2016-03-13", date: Mon Jan 01 1900 00:00:03 GMT+0100 (CET), close: 131}
...这就是数据集中无效的内容:{dd: "2016-03-13", date: "10:54:43", close: "10465"}
在data.csv中有大约20个数据条目具有无效的日期对象
<强>更新强>
上面的行为是因为,如果d.close为5000或更高,则不解析d.date。将代码更新为
// Get the data
d3.csv("data.csv", function(error, data) {
data.forEach(function(d) {
if (d.close < 5000) {
less5000++;
}
if (d.close > 5000) {
over5000++;
}
d.close = +d.close;
d.date = parseDate(d.date);
total++;
});
...
更新2
要过滤您的数组,请使用 array .filter(请参阅:https://github.com/mbostock/d3/wiki/Arrays)! 在你的情况下:
// Get the data
d3.csv("data.csv", function(error, data) {
data = data.filter(function(d){
d.close = +d.close;
d.date = parseDate(d.date);
return d.close < 5000;
});
...
数据只包含d.close小于5000的条目。